如何一起使用NSFetchedResultsController和UISearchController?

时间:2015-02-21 07:00:25

标签: ios swift core-data

我有一个包含tableView的视图。我使用NSFetchedResultsController显示Core Data的结果。

我想添加一个UISearchController(不是UISearchDisplayController,因为这个在iOS 8中已弃用)但我不知道如何链接它们。

我应该只有一个NSFetchedResultsController还是两个? 我想有一种方法可以使用NSFetchedResultsController获取所有数据,然后根据UISearchController我的错误对它们进行排序?

感谢你的帮助,你可以给我这个。

1 个答案:

答案 0 :(得分:9)

一些想法......

resultsController创建searchController时,您可以向其传递您要搜索的数据。如果您在主表中使用NSFetchedResultsController,则可以传递fetchedObjects数组。然后,为了响应对搜索文本的更改,您可以过滤数组(您可以使用谓词和filteredArrayUsingPredicate来创建带有搜索结果的单独数组,或者您可以遍历数组来构建它)。此路由的缺点是(除非您手动实现),搜索结果将不会分成单独的部分,并且如果基础数据发生更改(例如,在后台线程上),搜索结果将不会自动更新。

我想你可以有第二个NSFetchedResultsController:这将有助于使用部分,并且可能允许结果自动更新(使用委托方法),如果您的数据在后台更新,例如。但我会对它引入的复杂性感到紧张。

另一种选择,如果您选择原地应用搜索(即指定resultsController = nil),将使用搜索条件更新NSFetchedResultsController本身(即修改基础谓词和重新执行获取)。这样你的搜索表看起来和感觉就像主表一样(包括部分,如果你使用它)但显示的行显然会随着搜索条件变得更精细而减少。如果您有大型数据集,此选项需要注意确保FRC正确重建,并且在性能方面可能是不可接受的。