我需要帮助来思考并实施模拟NSFetchedResultsController
fetchedObjects
在模型层的过滤。
文档说:
响应变更
通常,
NSFetchedResultsController
旨在通过通知它来响应模型层的更改 当结果对象更改位置或部分时,委托 修改。
例如,如何在模型层实现搜索?
我想象一个Filter
实体,它与被过滤的实体有某种关系,并在NSFetchRequest
的谓词中使用。
也许我会创建一个Filter
对象,用搜索字段中的字符串配置它,然后保存该对象。这会影响NSFetchRequest
的谓词,因此NSFetchedResultsController
会获取私有消息以更新其fetchedObjects
并向其代理发出消息。
我可以创建其他Filter
个对象(或更改现有对象),这些对象会进一步影响NSFetchedResultsController
的{{1}},并且在删除后会停止影响fetchedObjects
,然后再“可见”。
fetchedObjects
的谓词是什么样的?答案 0 :(得分:0)
这不太可行。您的提取将指向实体A并使用与实体B相关的谓词,该实体包含您更新的某些配置。 FRC仅监控实体A的更改,而不是实体B的更改,因此当您更改配置时,它将不会被选中,因此不会触发代理。
执行此操作的唯一方法是更新谓词并重新启动FRC。替代方法是以某种方式将信息编码为实体A,但如果你能做到这一点,你就不需要FRC了,因为你已经拥有了所有新的搜索结果,而FRC就知道了...
答案 1 :(得分:0)
同意Wain。模型层不是搜索时更新列表的合适机制。
相反,修改fetchRequest
的{{1}}的{{1}}并重新获取。这是使用NSFetchedResultsController
实现搜索的常见模式。
答案 2 :(得分:0)
使用这种方法,您需要为Filter
的每个结果对象创建一个NSFetchedResultsController
对象来获取它。这些技巧可用于修改用户驱动的排序和分段,但对于过滤,最好使用NSFetchRequest
上的谓词过滤实际模型数据。
除非您想要进行一些非常具体的过滤,否则只能使用原始模型数据。在这种情况下,它将是一种替代方案,但您仍然需要为每个基础数据对象创建一个Filter
对象。