私の人生の間、NSFetchedResultsControllerDelegateメソッドが基礎となるデータストアにデータを追加するときに、なぜ起動しないのかわかりません。 iPhoneアプリケーションを再起動すると、データがすぐに表示されます。NSFetchedResultsControllerDelegateが起動しない
私はのUITableViewControllerをサブクラス化し、NSFetchedResultsControllerDelegateに準拠しています
@interface ProjectListViewController : UITableViewController <NSFetchedResultsControllerDelegate> {
NSFetchedResultsController* fetchedResultsController_;
NSManagedObjectContext* managedObjectContext_;
}
私はNSFetchedResultsControllerをインスタンス化し、自己へのデリゲートを設定します。
// Controller
fetchedResultsController_ = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"Client"
cacheName:@"ProjectsCache"];
fetchedResultsController_.delegate = self;
私はデリゲートメソッドを実装:
- (void)controllerWillChangeContent:(NSFetchedResultsController*)controller {
NSLog(@"ProjectListViewController.controllerWillChangeContent");
// The fetch controller is about to start sending change notifications, so prepare the table view for updates.
[self.tableView beginUpdates];
}
- (void)controllerDidChangeContent:(NSFetchedResultsController*)controller { ... }
- (void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { ... }
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type { ... }
を
保存したいエンティティを作成します。
Project* newProject = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
ProjectDetailViewController* detail = [[ProjectDetailViewController alloc] initWithStyle:UITableViewStyleGrouped
delegate:self
selector:@selector(finishedAdding:)
project:newProject];
以降、私はそれを保存します。
- (void)save {
// NSLog(@"ProjectDetailViewController.save");
self.project.name = projectNameTextField_.text;
NSError* error;
BOOL b = [self.project.managedObjectContext save:&error];
if (!b) {
NSLog(@"Error saving project!");
} else {
NSLog(@"Project was successfully saved.");
[delegate_ performSelector:selector_ withObject:self.project];
}
[self dismissModalViewControllerAnimated:YES];
}
それはすべて私のデリゲートメソッドが発動しないという事実を除いて正常に動作します。明らかに私のテーブルビューは更新されず、新しいデータを見るための唯一の方法は、明示的にアプリケーションをリフレッシュまたは再起動することです。
私はCoreData Recipeアプリを見てきましたが、私が見逃しているものを見つけることができません。思考?
-luther
ルーサー、NSFetchedResultsControllerを設定しているエンティティと述語を確認できますか? – ohhorob