2010-04-23 46 views
1

我有一个NSFetchedResultsController数据源的tableview,显示基础Core Data SQLite存储的名称列表。我已经实施了一个搜索栏。当在搜索栏被输入第一个字符,一个取以下形式请求被执行:使用NSFetchedResultsController和核心数据优化文本搜索

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

然而,进入第二检索文字的情况下,我想过滤fetchedResultsController的取出对象,而不是执行另一个获取请求(实现另一个获取请求,类似于上面的1,导致另一次访问我希望不会发生的商店,因为第二次获取的结果只是第一次的子集)。无论如何过滤fetchedResultsController,以避免再次去商店旅行?

+0

你有没有找到答案?给出的答案似乎没有考虑使用fetchedResultsController时发生的核心数据优化。可能,fetchedResultsController仍然是最好的方式,但是您是否有过如何在不使所有对象失效的情况下修改fetchRequest的示例? – Gujamin 2013-08-09 23:38:48

回答

2

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

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

+1

谢谢,我已经考虑过这一点,但我有一个分组的tableview,我不知道如何处理numberOfSections和rowsForSection这种方法 – RunLoop 2010-04-23 19:22:15

1

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

相关问题