メイン テーブル ビュー コントローラーで NSFetchedResultsController を使用する iPhone アプリを開発しています。メイン テーブル ビュー コントローラーの viewDidload で次のように作成します。
NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate,sortDescriptorTime, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptorDate release];
[sortDescriptorTime release];
[sortDescriptors release];
controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:@"date"
cacheName:nil];
[fetchRequest release];
NSError *error;
BOOL success = [controller performFetch:&error];
次に、後続のビューで、コンテキストに新しいオブジェクトを作成します。
TestObject *testObject = [NSEntityDescription insertNewObjectForEntityForName:@"TestObject" inManagedObjectContext:context];
TestObject にはいくつかの関連オブジェクトがあり、これらを同じ方法で作成し、提供された add...Objects メソッドを使用して testObject に追加します。
次に、コンテキストを保存する前にキャンセルを押してメイン テーブル ビューに戻ると、期待どおりに何も表示されません。ただし、アプリを再起動すると、コンテキストで作成したオブジェクトがメイン テーブル ビューに表示されます。どうして?最初は、NSFetchedResultsController がキャッシュから読み取っていたためだと思いましたが、ご覧のとおり、テストのためにこれを nil に設定しました。また、[context hasChanges] は、再起動後に true を返します。ここで何が欠けていますか?