シンプルなアプリのデバッグに一晩中費やしています。このアプリは、Webから1つの画像(はい、私の生活を楽にすることを目的としています)を取得し、テーブルビューで表示します。私はコアデータを学ぶための練習としてそれを行います。修正する前に、エラーメッセージは次のように表示されます。
2012-09-30 06:16:12.854サムネイル[34862:707] CoreData:エラー:重大なアプリケーションエラー。-controllerDidChangeContent:の呼び出し中に、NSFetchedResultsControllerのデリゲートから例外がキャッチされました。無効な更新:セクションの数が無効です。更新後のテーブルビューに含まれるセクションの数(1)は、更新前のテーブルビューに含まれるセクションの数(0)に、挿入または削除されたセクションの数(0挿入、0)をプラスマイナスする必要があります。削除)。userInfo(null)を使用
基本的には、FRCデリゲートメソッドで問題が発生したと言っています。一方では、セクション番号が0から1に変わります。他方では、「0が挿入され、0が削除されました」。では、セクション番号はどのように増やすことができますか?それは起こらないはずです..したがって、エラー。
FRCセットアップメソッドに追加[self.tableView reloadData]
するだけでバグを修正します。この投稿からインスピレーションを得ましたが、よくわかりません。答えは複雑すぎてプロジェクト固有のようです。誰かが追加するreloadData
ことでバグを修正できる理由を説明できますか?答えは簡単かもしれませんが、そう願っています。
それが重要な場合、私のアプリの主要なコンポーネント:
UIManagedDocument
コアデータスタックを確立するために使用します- FlickrAPIから画像をダウンロードするためのヘルパーメソッドを作成します
NSManagedObjectサブクラスファイルで、永続ストアからイメージをフェッチしてみてください。まだない場合は、MOCに挿入します。
- (void)setupFetchedResultsController { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"BigImage" inManagedObjectContext:self.document.managedObjectContext]; [fetchRequest setEntity:entity]; NSSortDescriptor *imageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"image" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject: imageDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; [fetchRequest setFetchBatchSize:20]; // Create fetch results controller self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.document.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; self.fetchedResultsController.delegate = self; NSError *error; if (![self.fetchedResultsController performFetch:&error]) { NSLog(@"Error in performFetch: %@, %@", error, [error userInfo]); } // Critical!! I add this line to fix the bug! [self.tableView reloadData]; }