我已经被这个问题困扰了一段时间,并已尽力找出解决方案。
我正在使用 Core Data,而且对于 iOS 编码来说相对较新,我在如何搜索 fetchedResultsController 以过滤掉用户在 searchBar 中输入的字符串时遇到了一些麻烦。
我知道如何从 searchBar 获取字符串以及如何调用 fetchResultsController 方法。但我正在努力解决的是如何使用 NSPredicate 仅将使用核心数据中存储的行与在 searchBar 中键入的行进行匹配。
目前我正在 - (NSFetchedResultsController *)fetchedResultsController 中执行此操作
(我按字母顺序切换排序只是为了向自己表明它正在工作)。
if (!isSearching) {
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"LabelValue" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
}
else {
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"LabelValue" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSLog(@"%@", searchBar.text);
/*NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY contains[cd] %@", searchBar.text];
[fetchRequest setPredicate:predicate];*/
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
}
我不太明白如何使用谓词来过滤我的数据。注释掉的代码在取消注释时会导致 NSException:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "ANY contains[cd] %@"'
这可能是一个非常简单的解决方案,但我将非常感谢您能够提供的任何帮助。谢谢