Come è codice di risposta di Guy diverso dalla questione? Per quanto posso immaginare, il metodo filterContentForSearchText: scope è chiamato dai metodi shouldReload?
In ogni caso, ecco un codice simile che ho aggiunto nell'esempio CoreDataBooks per includere la ricerca. Aggiungi un controller di visualizzazione di ricerca in IB per l'esempio di CoreDataBooks. Quindi ho aggiunto il codice a RootViewController.m come segue:
- (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. Per rispondere a Vivas, utilizzando un UISearchDisplayController, crea automaticamente una nuova vista tabella per sovrapporre l'elenco filtrato. Puoi verificare quale tabellaView viene utilizzata come mostrato nei documenti, ma nella configurazione più semplice funziona solo perché fetchedResultsController mostra una versione filtrata nella visualizzazione tabella della ricerca o mostra tutti i dati nella visualizzazione tabella.
fonte
2009-11-18 04:52:03
Come è terminata la gestione dei metodi di origine dati della vista tabella in modo che la vista tabella sappia se visualizzare o meno l''elenco filtrato'? – CraigH
La risposta qui è molto molto utile http://stackoverflow.com/questions/4471289/how-to-filter-nsfetchedresultscontroller-coredata-with-uisearchdisplaycontroll/4481896#4481896 – acecapades
Ecco quello che ho fatto: http: // StackOverflow .com/questions/4471289/how-to-filter-nsfetchedresultscontroller-coredata-with-uisearchdisplaycontrolle/4856118 # 4856118 –