NSFetchedResultsControllerでNSPredicateエラー
テンプレートのNavigation-Based Applicationで、
Use Coredataにチェックを入れて開始すると、
NSFetchedResultControllerを使ったアプリが出来る。
これを改造して使い方を勉強しようとfetchRequestにNSPredicateを使ってみた所、
条件を変更するとエラーが出力される現象に出会った。
Cocoaの日々様の
Cocoaの日々: -[NSFetchedResultsController performFetch:] でクラッシュ
にて解決。
キャッシュに持っている条件と違うからエラーが出ていたようだ。
元ソース
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
に対して、
キャッシュを使わない仕様にするか、(cacheNameにnilを指定)
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
条件を変える場合、キャッシュを消す仕様にするか、(deleteCacheWithNameで消す。)
[NSFetchedResultsController deleteCacheWithName:@"Root"]; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
が有効手段のようだ。
キャッシュはアプリを閉じても残っているので、
アプリ内で条件を変えなくても、仕様変更などで条件を変えた場合、一旦削除しないとならない。