Cómo es código de respuesta del individuo diferente de la cuestión? Por lo que puedo adivinar, el método filterContentForSearchText: scope es llamado por los métodos shouldReload?
De todos modos, aquí hay un código similar que he añadido en la muestra CoreDataBooks para incluir la búsqueda. Agregue un Controlador de visualización de búsqueda en IB para el ejemplo de CoreDataBooks. Luego agregué código a RootViewController.m de la siguiente manera:
- (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. Para responder a Vivas, usando un UISearchDisplayController crea una nueva vista de tabla automáticamente para superponer la lista filtrada. Puede verificar qué TableView se está utilizando como se muestra en los documentos, pero en la configuración más simple simplemente funciona porque fetchedResultsController muestra una versión filtrada en la vista de tabla de la búsqueda o muestra todos los datos en su vista de tabla.
Cómo acabaste el manejo de los métodos vista de tabla de fuente de datos para que la vista de tabla sabrá si se muestra la 'lista filtrada' o no? – CraigH
La respuesta aquí es muy útil http://stackoverflow.com/questions/4471289/how-to-filter-nsfetchedresultscontroller-coredata-with-uisearchdisplaycontroll/4481896#4481896 – acecapades
Esto es lo que hice: http: // stackoverflow .com/preguntas/4471289/cómo-a-filter-nsfetchedresultscontroller-coredata-con-uisearchdisplaycontrolle/4856118 # 4856118 –