Очень странные результаты с использованием NSPredicate в сочетании с полем поиска в табличном представлении и NSFetchedResultsController
Предполагается, что это фильтрация на основе совпадения имени ... однако, если я введу любое допустимое имя, я получу несколько результатов, которые просто не верны. Если я вписываю любое полное имя, например «Майк Джонсон» или «Келли Майклз», я всегда получаю один и тот же отфильтрованный результат «Анджело Смита».
NSLog покажет
"name CONTAINS [cd] \" Kelly Michaels \ ""
И все же отфильтрованный результат, отображаемый на экране, покажет только Анджело Смита? Есть идеи, как решить эту проблему?
Я использовал решение в этом сообщении, если вам нужно больше подробностей о том, что я делаю
Как отфильтровать NSFetchedResultsController (CoreData) с помощью UISearchDisplayController / UISearchBar
- (NSFetchedResultsController *)newFetchedResultsControllerWithSearch:(NSString *)searchString
{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
NSPredicate *filterPredicate = nil;
/*
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:@"Staff" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSMutableArray *predicateArray = [NSMutableArray array];
if(searchString.length)
{
NSLog(@"here searchString is %@", searchString);
// your search predicate(s) are added to this array
[predicateArray addObject:[NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", searchString]];
// finally add the filter predicate for this view
NSLog(@"%@", predicateArray);
if(filterPredicate)
{
filterPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:filterPredicate, [NSCompoundPredicate orPredicateWithSubpredicates:predicateArray], nil]];
}
else
{
filterPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicateArray];
}
}
[fetchRequest setPredicate:filterPredicate];
...