Comment utiliser NSFetchedResultsController et UISearchDisplayController

J'ai été la création d'une Application iPhone à l'aide de Données de Base.

Tout d'abord, est-il judicieux d'utiliser un NSFetchedResultsController et un UISearchDisplayController ensemble pour aller chercher le résultat? Recommanderiez-vous autre chose?

J'ai essayé assez longtemps combinant une NSFetchedResultController et un UISearchDisplayController. J'ai l'intention de créer un NSPredicate dans le (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption méthode à la NSFetchedResultController de la UIViewController. Mais cela ne fonctionne pas bien.

Alors, avez-vous une idée de comment mettre en œuvre une solution pour mon problème? Je vous remercie déjà pour l'affichage des réponses ou des liens vers de bons tutoriels.

MODIFIER

Voici mon code. Le UISearchDisplayDelegate méthodes d'appeler la méthode (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope qui doit définir le prédicat de la NSFetchedResultController. J'ai aussi ajouté le code de la NSFetchedResultController.

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
//Return YES to cause the search result table view to be reloaded.
return YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
//Return YES to cause the search result table view to be reloaded.
return YES;
}
- (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];
[fetchedResultsController.fetchRequest setPredicate:predicate];
}
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
//Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1);  //Fail
}  
}
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
/*
Set up the fetched results controller.
*/
//Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
//Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
//Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
//Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//Edit the section name key path and cache name if appropriate.
//nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
} 

source d'informationauteur burki