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"];

が有効手段のようだ。

キャッシュはアプリを閉じても残っているので、
アプリ内で条件を変えなくても、仕様変更などで条件を変えた場合、一旦削除しないとならない。