使用NSPredicate搜索NSFetchedResultsController

时间:2011-04-12 09:24:05

标签: iphone objective-c core-data nsfetchedresultscontroller

我一直坚持这个问题一段时间,并尽力制定解决方案。

我正在使用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] %@"'

这可能是一个非常简单的解决方案,但我非常感谢你能提供的任何帮助。感谢

1 个答案:

答案 0 :(得分:2)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY <yourFieldNameHere> contains[cd] %@", searchBar.text];