iPhone アプリがクラッシュすると、コンソールに次のエラーが表示されます。
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2372/UITableView.m:1070
このコード行に到達するとクラッシュし、これが表示されます。
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[tableView endUpdates];
}
私のアプリと、どのようにしてこれにたどり着いたかについて少し詳しく説明します。コア データ オブジェクトを表示するテーブル ビューを持つビュー コントローラーがあります。2 つのエンティティからのデータを表示するようにこのビューを設定したので、テーブル セクション 1 にはエンティティのオブジェクトが表示され、セクション 2 には 2 番目のエンティティからのオブジェクトが表示されます。
これが私の問題の始まりです。これはかなりうまくいきましたが、次のビュー コントローラーをプッシュして最初のエンティティにオブジェクトを追加し、問題なくテーブルビュー コントローラーに戻すことができます。ただし、オブジェクトを 2 番目のエンティティに追加しようとすると、tableviewcontroller に戻ると、上記のようにクラッシュします。
これの原因を特定できないため、どこから調べればよいかわかりません。
コンソールからの追加のエラー情報:
CoreData: エラー: 重大なアプリケーション エラーです。-controllerDidChangeContent: の呼び出し中に、NSFetchedResultsController のデリゲートから例外がキャッチされました。無効な更新: セクション 0 の行数が無効です。更新後の既存のセクションに含まれる行数 (2) は、更新前にそのセクションに含まれる行数 (2) に、その数をプラスまたはマイナスした値と等しくなければなりません。そのセクションに挿入または削除された行の数 (1 挿入、0 削除)、およびそのセクションに移動された、またはそのセクションから移動された行数 (0 移動、0 移動)。userInfo (ヌル)
コード:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSInteger rows;
id <NSFetchedResultsSectionInfo> sectionInfoAccounts = [[fetchedResultsControllerAccounts sections] objectAtIndex:0];
id <NSFetchedResultsSectionInfo> sectionInfoCosts = [[fetchedResultsControllerCosts sections] objectAtIndex:0];
if (section == 0) rows = [sectionInfoAccounts numberOfObjects];
else if (section == 1) rows = [sectionInfoCosts numberOfObjects];
return rows;
}