有一段时间我一直在努力寻找一个好的答案:
如何将 NSManagedObjects 作为 MVVM 中的模型来处理?
我尝试了几种不同的方法:
- 在 ViewModel 上保留
NSManagedObject
的副本 - 尽管这对我来说似乎有点危险,可能会出现线程问题 - 通过
-initWithModel:
方法将NSManagedObject
解压到我在虚拟机上实际使用的属性中 - 这意味着我不再收到的任何更新初始初始化后的 NSManagedObject
- 保留
NSManagedObject
的NSManagedObjectID
的副本,并专门针对每个 ViewModel 实例使用NSManagedObjectContext
来检索和监控私有(private)NSManagedObject
及其属性 - 对每个 ViewModel 实例执行此操作似乎有点繁重(并且可能非常脆弱)
这些看起来都不理想。我脑子里有一个想法,最好结合通过 -initWithModel:
传入初始 NSManagedObject
实例,但只保留 NSManagedObjectID
>,然后监听核心数据保存通知并清除任何与保留的对象 ID 无关的通知。
最佳答案
我会做的,我不知道这是否一定是最佳实践,是传入模型,然后将 View 模型的属性绑定(bind)到模型上的(可能映射的)属性。这样您就可以通过 View 模型获取更新。它确实留下了一点线程问题,但您可以使用deliverOn:
来确保更新始终在主调度程序上传递。
关于cocoa - 使用 MVVM 时处理 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22145291/