对 CoreData 中的 1 个条目使用 Fetched Results Controller
Posted
技术标签:
【中文标题】对 CoreData 中的 1 个条目使用 Fetched Results Controller【英文标题】:Using a Fetched Results Controller for 1 single entry in CoreData 【发布时间】:2017-08-09 13:56:47 【问题描述】:我有一个 swift(或一般的 ios)问题:
我的场景:
我有一个表格,每个单元格中都有头像(除其他外)。每个化身都有一个存在(可用/不可用)。每个单元格中其他内容的数据源不受 CoreData 支持(这是一个限制),并且与提供头像照片和状态的用户(在 CoreData 中 )没有任何关系。 p>
所以我将我的头像设置为一个视图,它可以获取用户,然后呈现用户的照片和状态。当用户(在 CoreData 中)的状态发生变化时,需要通知视图,以便它可以更新头像上的状态指示器。 (不要担心我的代码结构,我使用的是 MVC,但我简化了一些事情以避免对我的场景进行冗长的描述)。
我的问题:
使用NSFetchedResultsController
(FRC) 观察 CoreData 中的 1 个单个条目是否不好?还有其他更适合这个的吗(因为NSFetchedResultsController
真的适合表格视图)?
基本上我要做的就是让化身使用 FRC 来监听 CoreData 中用户的变化。因此,每个单元格中的每个化身都会有一个观察 1 个用户的 FRC。以这种方式使用 FRC 对我来说似乎很奇怪。 (不用担心cell重用,当头像被cell重用处理时,所有FRC也会被处理掉)。
其他选项:
我可以在我的用户 CoreData 存储管理器对象上设置一个观察者(委托)来监听特定用户的更改(存储管理器用于更新 CoreData 中的条目,因此对 CoreData 用户实体的所有更新都通过那)然后当观察者听到变化时,它可以通知与该用户相关联的代表(这将是化身)。但这基本上就像制作我自己的 FRC。这会因为表格中的单元格重用变得复杂(因为每个头像都在表格中的一个单元格中),因为我认为我必须经常注册/取消注册代表。
我可以在用户存储的 MOC 上监听任何有关更改的通知(例如 NSManagedObjectContextObjectsDidChange
),但随后我会为 每个 用户获取更改并且必须进行过滤。再一次,我觉得这类似于重新实现 FRC,但效率可能较低,而且我可能还会遇到单元重用的复杂性。
总结:
我只是想听听数据库中唯一(按用户 ID)条目更改的最佳方式的建议。 FRC 是最好的方法,还是有更好的方法?
【问题讨论】:
【参考方案1】:如果您有对 User 模型对象的引用,您可以对其属性进行 KVO。
【讨论】:
以上是关于对 CoreData 中的 1 个条目使用 Fetched Results Controller的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如何避免 CoreData 中的重复条目以使用 JSON 数组实现?