Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在模型层筛选NSFetchedResultsController_Ios_Objective C_Core Data_Nsfetchedresultscontroller - Fatal编程技术网

Ios 在模型层筛选NSFetchedResultsController

Ios 在模型层筛选NSFetchedResultsController,ios,objective-c,core-data,nsfetchedresultscontroller,Ios,Objective C,Core Data,Nsfetchedresultscontroller,我需要帮助在模型层思考并实现对NSFetchedResultsController的fetchedObject的过滤 医生说: 应对变化 通常,NSFetchedResultsController旨在通过通知其 当结果对象更改位置或截面被删除时委托 修改 例如,如何在模型层实现搜索 我想象一个Filter实体,它以某种方式与被过滤的实体相关,并在NSFetchRequest的谓词中使用 也许我会创建一个过滤器对象,用搜索字段中的字符串对其进行配置,然后保存该对象。这将影响NSFetchRequ

我需要帮助在模型层思考并实现对
NSFetchedResultsController
fetchedObject
的过滤

医生说:

应对变化 通常,
NSFetchedResultsController
旨在通过通知其 当结果对象更改位置或截面被删除时委托 修改

例如,如何在模型层实现搜索

我想象一个
Filter
实体,它以某种方式与被过滤的实体相关,并在
NSFetchRequest
的谓词中使用

也许我会创建一个
过滤器
对象,用搜索字段中的字符串对其进行配置,然后保存该对象。这将影响
NSFetchRequest
的谓词,因此
NSFetchedResultsController
将获取私有消息以更新其
fetchedObject
,并向其委托发出消息

我可以创建其他
过滤器
对象(或更改现有对象),这将进一步影响
NSFetchedResultsController
获取对象
,并且在删除后,将停止影响
获取对象
,这些对象将再次“可见”

  • 在Xcode的模型编辑器中,模型是什么样子的
  • NSFetchRequest
    的谓词是什么样子的
  • 这种方法有哪些缺点

    • 这不太可能奏效。您的获取将指向实体A,并使用与实体B相关的谓词,该谓词保存您更新的一些配置。FRC只监视对实体A的更改,而不是实体B的更改,因此当您更改配置时,它不会被拾取,因此不会触发代理


      唯一的方法是更新谓词并重新启动FRC。另一种方法是以某种方式将信息编码到实体A中,但如果你能做到这一点,你就不需要FRC,因为在FRC知道之前,你已经拥有了所有新的搜索结果…

      同意Wain。模型层不是在搜索时更新列表的合适机制


      相反,修改
      NSFetchedResultsController
      fetchRequest
      谓词
      ,然后重新提取。这是使用
      UITableView
      实现搜索的常见模式

      使用这种方法,您需要为
      NSFetchedResultsController
      的每个结果对象创建一个
      过滤器
      对象来拾取它。这些技巧可以应用于修改用户驱动的排序和分段,但对于过滤,最好使用
      NSFetchRequest
      上的谓词,该谓词对实际模型数据进行过滤


      除非你想做一些非常具体的过滤,而这些过滤只能通过使用原始模型数据来完成。在这种情况下,它将是一种替代方法,但您仍然需要为每个基础数据对象创建一个
      过滤器
      对象。

      感谢您在Alek中的提示。当然,关键是NSFetchedResultsController的底层机制不会响应NSFetchRequest谓词中的更改(无需重新获取),这正是我想要实现的:在依赖已存在的引擎盖下更改观察的同时进行过滤。好的,因此,您想要的是更改谓词运行时并获得数据集中的更改通知?是:通过NSFetchedResultsControllerDelegate协议获得这些更改的通知。