アプリで奇妙な問題が発生しました。
をインスタンス化しNSFetchedResultsController
て、配列にデータを入力します。
このように宣言されています(として@propoerty (nonatomic, retain)
)
- (NSFetchedResultsController *)fetchedContactsController {
if (self->fetchedContactsController != nil) return self->fetchedContactsController;
// Create the fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// I want every contact...
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self->managedObjectContext];
[fetchRequest setEntity:entity];
// ... whose are not associated with my order item
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%@ IN items)", self.orderItem];
[fetchRequest setPredicate:predicate];
// Edit the section name key path and cache name if appropriate
self.fetchedContactsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self->managedObjectContext sectionNameKeyPath:nil cacheName:nil];
[aFetchedResultsController release];
[firstnameSortDescriptor release];
[lastnameSortDescriptor release];
[sortDescriptors release];
[fetchRequest release];
// Execute the fetch request
[self->fetchedContactsController performFetch:nil];
return self->fetchedContactsController;
}
もちろん、contacts.items は存在します。
アプリがバックグラウンドになってから再びフォアグラウンドになったとき、別のことをすると
NSLog(@"before >>> %d", [[fetchedContactsController fetchedObjects]count]); // >>> 3
[self->fetchedContactsController performFetch:nil];
[tableView reloadData];
NSLog(@"after >>> %d", [[fetchedContactsController fetchedObjects]count]); // >>> 0
私の配列のすべての行が消えます!
編集 :
これらの行にコメントすると:
// ... whose are not associated with my order item
//NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%@ IN items)", self.orderItem];
//[fetchRequest setPredicate:predicate];
問題はもう発生しません!しかし、それは私が望むものではありません...