NSFetchedResultsControllerを次の方法で開始しました。
NSEntityDescription *myEntity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:myEntity];
[fetchRequest setFetchBatchSize:10];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor, nil]];
myFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
myFetchedResults.delegate = self;
[myFetchedResults performFetch:nil];
いくつかの事実:
wasDeletedは、MyEntityのNSNumberプロパティ(BOOL)です。
このプロパティを
[NSNumber numberWithBool:YES]
NSFetchedResultsControllerDelegateに更新すると、didChangeObjectが呼び出されますが、NSFetchedResultsChangeDeleteの代わりにNSFetchedResultsChangeUpdateが起動されます。ただし、ビューをポップして、フェッチされた結果コントローラーを再度初期化すると、オブジェクトはもう存在せず、機能していることがわかります
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];
。このNSFetchedResultsChangeUpdateの後、cellForRowが呼び出されると、wasDeletedが出力され、YESに設定されます。
ここで何が間違っている可能性がありますか?
(つまり、オブジェクトがコンテキストにまだ存在しているが、述語に適合しない場合は、NSFetchedResultsChangeDeleteを呼び出すことができますか?)