ガイの回答コードは質問とどう違うのですか? 私が推測できる限り、filterContentForSearchText:scope メソッドは shouldReload メソッドによって呼び出されますか?
いずれにせよ、検索を含めるために CoreDataBooks サンプルに追加した同様のコードを次に示します。CoreDataBooks サンプル用に IB に Search Display Controller を追加します。次に、次のように RootViewController.m にコードを追加しました。
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
NSInteger searchOption = controller.searchBar.selectedScopeButtonIndex;
return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption];
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
NSString* searchString = controller.searchBar.text;
return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption];
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString*)searchString searchScope:(NSInteger)searchOption {
NSPredicate *predicate = nil;
if ([searchString length])
if (searchOption == 0) // full text, in my implementation. Other scope button titles are "Author", "Title"
predicate = [NSPredicate predicateWithFormat:@"title contains[cd] %@ OR author contains[cd] %@", searchString, searchString];
else
// docs say keys are case insensitive, but apparently not so.
predicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", [[controller.searchBar.scopeButtonTitles objectAtIndex:searchOption] lowercaseString], searchString];
[fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return YES;
}
PS。Vivas に応答するには、UISearchDisplayController を使用して、フィルター処理されたリストをオーバーレイする新しいテーブル ビューを自動的に作成します。ドキュメントに示されているように、どの tableView が使用されているかを確認できますが、最も単純なセットアップでは、fetchedResultsController が検索のテーブル ビューでフィルター処理されたバージョンを表示しているか、テーブル ビューですべてのデータを表示しているため、機能します。