2017-04-23 6 views
1

私はSwiftにiOSアプリケーションを作成しています。iOSのtableViewに新しい行を挿入する

ページが読み込まれるたびに、サーバーからムービーのリストが取得され、そのリストがtableViewに設定されます。

静的ライブラリ(Objective-C)のサーバーからJSONを取得するコードを作成し、通知デザインパターンを使用してjsonからアプリケーションを受信して​​います。

override func viewDidLoad() { 
    super.viewDidLoad() 
    NotificationCenter.default.addObserver(self, selector: #selector(ReceivedNListOfMoviesNotification(_:)), name: Notification.Name(VUSDK.basicNotificationName()), object: nil) 
    requestForData() 
    } 

    func ReceivedNListOfMoviesNotification(_ notification:NSNotification) 
    { 
     if let info = notification.userInfo {   
     basicArray=info["Search"] as! [Any] 
     if basicArray.count>0 { 
      tableView.beginUpdates() 
      self.tableView.insertRows(at: [IndexPath.init(row: self.basicArray.count-1, section: 0)], with: .automatic)      
      tableView.endUpdates() 
     } 
     } 
    } 

しかし、アプリがクラッシュする:

***アサーション失敗 - [のUITableView _endCellAnimationsWithContext:]、/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit- 3600.7.47/UITableView.m:1737 2017-04-23 13:49:12.562 VUDemo [4835:164247] ***キャッチされていない例外 'NSInternalInconsistencyException'のためアプリを終了しています、理由: '無効な更新:無効な行数更新(10)後の既存のセクションに含まれる行の数は、更新前のそのセクションに含まれる行の数(0)に、行の数のプラスまたはマイナス(挿入された0、削除された0)、そのセクションの内外へ移動された行の数をプラスまたはマイナスします(0は移動し、0は移動しました)。

+0

データソース配列には、対応する項目をどこに追加しますか?データソース配列に項目を挿入し、次に**行を挿入する**最初の**を持っています。 Btw: 'begin-/endUpdates'行を削除します。彼らは効果がありません。 – vadian

+0

basicArray = info ["Search"] as! [Any] –

+0

この場合、 'insert ...'を呼び出さないでください。代わりに 'tableView.reloadData()'を呼び出してください。 – vadian

答えて

0

あなたは配列全体を上書きするのではなく単一の項目を追加しているので、

if !basicArray.isEmpty { 
     tableView.reloadData() 
    } 

if basicArray.count>0 { 
     tableView.beginUpdates() 

     self.tableView.insertRows(at: [IndexPath.init(row: self.basicArray.count-1, section: 0)], with: .automatic) 

     tableView.endUpdates() 
    } 

を交換してください。

関連する問題