使用NSFetchedResultsController优化文本搜索&核心数据

时间:2010-04-23 17:53:09

标签: iphone cocoa-touch core-data

我有一个带有NSFetchedResultsController数据源的tableview,显示了底层Core Data SQLite存储中的名称列表。我已经实现了一个搜索栏。在搜索栏中输入第一个字符时,将执行以下形式的提取请求:

NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"name beginswith[cd] %@", searchText];

然而,当输入第二个搜索字符时,我想过滤fetchedResultsController的获取对象,而不是执行另一个获取请求(实现另一个获取请求,类似于上面的1,导致另一次访问商店我希望不会发生这种情况,因为第二次获取的结果只是第一次获取的一个子集。有没有过滤fetchedResultsController,以避免另一次商店之旅?

2 个答案:

答案 0 :(得分:2)

是的,设置搜索“状态”,然后将NSTableViewDatasource切换为指向从-fetchedObjects返回的NSFetcResultsController过滤掉的数组。

然后,您可以在用户输入更多信息时更新该阵列上的过滤器,并且不会返回到商店。这甚至可以让您对输入的第一个字符进行过滤,甚至可以避免不必要的商店之旅。

答案 1 :(得分:1)

您始终可以将第一次获取的结果存储到数组中,当搜索栏中的文本发生更改时,使用另一个谓词过滤数组的内容。