使用 NSPredicate 搜索 NSFetchedResultsController

Posted

技术标签:

【中文标题】使用 NSPredicate 搜索 NSFetchedResultsController【英文标题】:Search NSFetchedResultsController using NSPredicate 【发布时间】:2011-04-12 09:24:05 【问题描述】:

我已经被这个问题困扰了一段时间,并尽我所能想出了一个解决方案。

我正在使用 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】:

   

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

【讨论】:

以上是关于使用 NSPredicate 搜索 NSFetchedResultsController的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 和数组进行 cloudKit 搜索

使用 NSPredicate 进行核心数据实体搜索

使用 NSPredicate 搜索/过滤自定义类数组

如何使用 NSPredicate 加快数组搜索速度?

使用 NSPredicate 搜索字符串数组

使用 NSPredicate 搜索 NSFetchedResultsController