【iOS】Core Dataでfetchされたデータの絞り込み検索(なんとか解決)
なんとも単純な箇所がネックだった。
前回、Core Dataに登録したデータをUISearchBarで絞り込みしようと思い、以下のメソッドを追加した。
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
上記コードは、Cocoaの日々さんの記事、およびiOS Developer Libraryのサンプルコードを参考にしました。ありがとうございます。
んで
前回のクラッシュは何が原因だったかというと、キャッシュ名でした。元々、
- (NSFetchedResultsController *)fetchedResultsController
というメソッドの中で
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
という箇所があります。ここで、cacheName:@"Root"でRootと指定しています。しかし、
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { NSString *query = self.searchDisplayController.searchBar.text; if (query && query.length) { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", query]; [self.fetchedResultsController.fetchRequest setPredicate:predicate]; [NSFetchedResultsController deleteCacheWithName:@"Root"]; } NSError *error = nil; if (![self.fetchedResultsController performFetch:&error]) { // Handle error NSLog(@"Unresolved error %@, %@", error, [error userInfo]); exit(-1); // Fail } }
の中で、deleteCacheWithName:@"Root"というとこ、ここを"UserName"と書いていたんす。これを合わせたら、OKでした。スクリーンショットを以下に。
と、いうわけで、次は、登録したレコードの更新を。