NSFetchedResultsController を使用して、フェッチされた管理対象オブジェクトを 1 つのセクションを持つテーブル ビューに表示することを管理しています。テーブルは空の状態で開始され、ユーザーは UI を使用してテーブルに新しいエンティティを追加できます。現状では、プログラムは最初のエンティティを追加するときに常に機能し、2 番目のエンティティを追加すると常にクラッシュします。クラッシュ時にエラーが表示されない場合もあれば、さまざまな種類のエラーが発生する場合もあります (一部を以下に示します)。ログ ステートメントとトレースを通じて、NSFetchResultsController のデリゲートの controllerWillChangeContent ([self.tableView beginUpdates]; を呼び出す) メソッドが終了した直後に、コード内の他のメソッドが呼び出される前に、プログラムがクラッシュすることがわかります。これが私のコードの関連部分の一部です。NSFetchedResultsController の構成:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Beer"
inManagedObjectContext:self.managedObjectContext]];
// Configure request's entity and predicate
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
NSString *expression = [NSString stringWithFormat:@"brewery.name LIKE \"%@\"", self.brewery.name];
NSPredicate *predicate = [NSPredicate predicateWithFormat:expression];
[fetchRequest setPredicate:predicate];
self.resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
self.resultsController.delegate = self;
[fetchRequest release];
NSError *error = nil;
BOOL success = [resultsController performFetch:&error];
if (!success) {
NSLog(@"Error fetching request %@", [error localizedDescription]);
}
新しいエンティティの追加:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Beer" inManagedObjectContext:self.managedObjectContext];
Beer *beer = [[Beer alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];
beer.name = beerName;
beer.brewery = self.brewery;
セクションが 1 つのテーブルを表示する際の問題に関するドキュメントの警告を確認しましたが、Apple の回避策を使用しましたが、役に立ちませんでした。とにかく、これらのメソッドはクラッシュの前に呼び出されません。
私が受け取ったエラーのいくつか:
Serious application error. Exception was caught during Core Data change processing: *** -[NSCFString compareObject:toObject:]: unrecognized selector sent to instance 0x4e808c0 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[CALayer compareObject:toObject:]: unrecognized selector sent to instance 0x4e53b80 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[UITextTapRecognizer controllerWillChangeContent:]: unrecognized selector sent to instance 0x4ca5d70 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x4e271a0 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[NSCFNumber countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x4c96ee0 with userInfo (null)
ご覧のとおり、エラー (表示された場合) は、コードに変更が加えられていない場合でも一貫性がありません。
誰かが私が間違っていることを理解できますか?