很奇怪的結果時,結合非常混亂的結果與NSPredicate過濾使用NSPredicate
它應該匹配名字濾波基礎上實現代碼如下一個搜索框和NSFetchedResultsController回來......但是,如果我在任何有效輸入名字,我得到一些結果不正確。如果我輸入任何全名,如「邁克約翰遜」或「凱利邁克爾」,我總是得到相同的過濾結果「安吉洛史密斯」。
的的NSLog將顯示 「名稱中包含[CD] \」凱利邁克爾\「」
然而,在屏幕上顯示的過濾結果將只顯示安傑洛·史密斯?任何想法如何解決這個問題?
我一直在使用這一疊後的解決方案,如果你需要更多的細節我在做什麼 How to filter NSFetchedResultsController (CoreData) with 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];
...
嗯,這似乎是返回結果的正確數目。即如果我輸入「Mar」,我會得到兩個結果。這是有道理的,因爲我有兩名名字中帶有「Mar」的員工。馬克和瑪麗。但是,名稱卻代表「Angelo」和「Colin」。因此,它正在篩選正確的員工數量,但沒有顯示他們的專有名稱?我需要一個reloadData嗎? – sayguh