Самый чистый способ сделать это - использовать два NSFetchedResultsControllers и установить предикат для вашего «поискового» NSFRC в качестве searchText в UISearchBar. После того, как вы решите, какой NSFRC использовать, вы просто устанавливаете свой self.fetchedResultsController = "search" NSFRC или "NSFRC" по умолчанию.
Вы также можете использовать тот же NSFRC и изменить предикат, но это не рекомендуемый способ сделать это.
См. Комментарий ниже. Если все, что меняется, это предикат, то один FRC в порядке.
Вот пример кода, чтобы сделать это:
// First use the Searchbar delegate methods
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[self filterContentForSearchText:searchText];
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[self filterContentForSearchText:searchBar.text];
[searchBar resignFirstResponder];
}
// The method to change the predicate of the FRC
- (void)filterContentForSearchText:(NSString*)searchText
{
NSString *query = searchText;
if (query && query.length) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@ or department contains[cd] %@", query, query];
[self.fetchedResultsController.fetchRequest setPredicate:predicate];
[self.fetchedResultsController.fetchRequest setFetchLimit:100]; // Optional, but with large datasets - this helps speed lots
}
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
// Handle error
exit(-1);
}
[self.myTableView reloadData];
}
Это должно начать тебя.