我正在使用我的iPhone的核心数据创建一个简单的基于导航的应用程序,我正在尝试实施一些搜索。 该应用程序基于Apple的“基于导航的应用程序”模板。 NSFetchedResultsController获取所有对象,它们将显示在表视图中。我也离开了Plus按钮添加新对象。 好吧,我已经实现了一个UISearchBar和一个UISearchDisplayController。搜索使用相同的NSFetchedResultsController来过滤对象。 NSPredicate将在UISearchDisplayController委托方法中设置,但似乎尚未设置谓词,因为fetchedResultsController不会过滤任何内容。那是我的第一个问题。 现在,如果我按下搜索栏的取消按钮并想按加号按钮插入一个新对象,它就不会出现。不会插入任何对象,应用程序不会崩溃,它什么都不会发生。
我是否必须在一个视图中使用两个不同的NSFetchedResultsController?如果是,这并不能解决为什么没有设置NSPredicate的问题。 我已经感谢你的帮助了。
答案 0 :(得分:4)
如果您修改了获取请求(例如通过更改谓词),则需要创建一个新的获取结果控制器。
或者,您可以将获取的对象作为数组访问(使用获取的结果控制器的fetchedObjects
属性),并根据搜索条件筛选该数组。这样做的另一个好处是可以与Apple的sample code进行更多的对齐以进行表搜索(因为它们使用数组来支持表视图)。