CoreDataで「CoreData could not fulfill a fault」

NO IMAGE

CoreDataにアクセスすると、「CoreData could not fulfill a fault」が発生する場合の対処法。

faultはデータを読み込めていない状態なのですが、それを解決しようとして落ちたという感じです。

私の状況はNSFetchedResultsControllerを使っていました。また症状としては、アプリインストール後の一発目は大丈夫なのですが、2回目以降で、このエラーが発生します。

原因は、

[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:moc sectionNameKeyPath:nil cacheName:@"Root"];

です。@”Root”でキャッシュをなんとなく指定したのですが、これが問題です。NSFetchedResultsControllerはキャッシュがあれば、そこを見に行きます。私の場合、画面起動時に古いデータを削除していたのが問題で、CoreData上は存在しないファイルがキャッシュに残っており、それを参照したNSFetchedResultControllerがFaultを解決できないわけです。

キャッシュを削除することで解決します。

[NSFetchedResultsController deleteCacheWithName:@"Root"];