代码之家  ›  专栏  ›  技术社区  ›  RunLoop

使用NSFetchedResultsController和Core数据优化文本搜索

  •  1
  • RunLoop  · 技术社区  · 15 年前

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

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

    但是,当输入第二个搜索字符时,我希望筛选fetchedResultsController的提取对象,而不是执行另一个提取请求(实现另一个提取请求,类似于上面的1,结果在另一次去商店的旅行中,我希望不会发生,因为第二次取货的结果只是第一次取货的一个子集)。是否仍要筛选fetchedResultsControl以避免再次访问商店?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Marcus S. Zarra    15 年前

    是的,设置一个搜索“状态”,然后切换 NSTableViewDatasource 指向从 -fetchedObjects 从您的 NSFetcResultsController .

    然后,您可以在用户键入更多信息时更新该数组上的筛选器,而该筛选器不会返回到存储区。这甚至可以让您过滤输入的第一个字符,甚至避免不必要的商店之旅。

        2
  •  1
  •   Gordon Hughes    15 年前

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