コアデータに2つのエンティティがあり、それらの間には1対多の関係があります(Dreamにはシンボルとの1対多の関係があります)。また、述語と、検索が行われているときに呼び出される適切なsearchFetchedResultsControllerを使用して、検索機能を提供しました。次に、検索バーのスコープボタンを使用して検索スコープ機能を実装したいと思います。うまく機能している夢をフィルタリングするのではなく、シンボルに基づいてコンテンツをフィルタリングするように述語を変更するにはどうすればよいですか。別のfetchedResultsControllerを作成する必要がありますか、それともこのsearchFetchedResultsControllerの述語を変更して、目的の結果を取得する必要がありますか?
- (NSFetchedResultsController *)newFetchedResultsControllerWithSearch:(NSString *)searchString {
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Dream"
inManagedObjectContext:self.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:@"dateTimeStamp" ascending:NO] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Configure predicate
NSPredicate *filterPredicate = nil;
if (searchString.length) {
filterPredicate = [NSPredicate predicateWithFormat:@"note CONTAINS[cd] %@", searchString];
}
[fetchRequest setPredicate:filterPredicate];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
aFetchedResultsController.delegate = self;
NSError *error = nil;
if (![aFetchedResultsController performFetch:&error]) {
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return aFetchedResultsController;
}