我有一个包含tableView的视图。我使用NSFetchedResultsController
显示Core Data的结果。
我想添加一个UISearchController(不是UISearchDisplayController
,因为这个在iOS 8中已弃用)但我不知道如何链接它们。
我应该只有一个NSFetchedResultsController
还是两个?
我想有一种方法可以使用NSFetchedResultsController
获取所有数据,然后根据UISearchController
我的错误对它们进行排序?
感谢你的帮助,你可以给我这个。
答案 0 :(得分:9)
一些想法......
为resultsController
创建searchController
时,您可以向其传递您要搜索的数据。如果您在主表中使用NSFetchedResultsController
,则可以传递fetchedObjects
数组。然后,为了响应对搜索文本的更改,您可以过滤数组(您可以使用谓词和filteredArrayUsingPredicate
来创建带有搜索结果的单独数组,或者您可以遍历数组来构建它)。此路由的缺点是(除非您手动实现),搜索结果将不会分成单独的部分,并且如果基础数据发生更改(例如,在后台线程上),搜索结果将不会自动更新。
我想你可以有第二个NSFetchedResultsController
:这将有助于使用部分,并且可能允许结果自动更新(使用委托方法),如果您的数据在后台更新,例如。但我会对它引入的复杂性感到紧张。
另一种选择,如果您选择原地应用搜索(即指定resultsController
= nil),将使用搜索条件更新NSFetchedResultsController
本身(即修改基础谓词和重新执行获取)。这样你的搜索表看起来和感觉就像主表一样(包括部分,如果你使用它)但显示的行显然会随着搜索条件变得更精细而减少。如果您有大型数据集,此选项需要注意确保FRC正确重建,并且在性能方面可能是不可接受的。