私は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は移動しました)。
データソース配列には、対応する項目をどこに追加しますか?データソース配列に項目を挿入し、次に**行を挿入する**最初の**を持っています。 Btw: 'begin-/endUpdates'行を削除します。彼らは効果がありません。 – vadian
basicArray = info ["Search"] as! [Any] –
この場合、 'insert ...'を呼び出さないでください。代わりに 'tableView.reloadData()'を呼び出してください。 – vadian