使用MVVM时处理NSManagedObjects

时间:2014-03-03 11:15:22

标签: cocoa core-data mvvm

我一直在努力寻找这个问题的好答案:

如何将NSManagedObjects作为MVVM中的模型处理?

我尝试过几种不同的方法:

  • 在ViewModel上保留NSManagedObject的副本 - 虽然这对我来说似乎有点危险,但有潜在的线程问题
  • 通过NSManagedObject方法将-initWithModel:打包到我在VM上实际使用的属性中 - 这意味着我在初始初始化后不再收到NSManagedObject的任何更新
  • 保留NSManagedObject NSManagedObjectID的副本,并专门为每个ViewModel实例使用NSManagedObjectContext来检索和监控私有NSManagedObject及其属性 - 这对每个ViewModel实例(并且可能非常脆弱)执行此操作似乎有点沉重

这些似乎都不理想。我脑子里有一个想法,最好通过NSManagedObject将初始-initWithModel:实例中的传递结合起来,但只保留NSManagedObjectID,然后监听核心数据保存通知和除草任何与保留的对象ID无关的任何内容。

1 个答案:

答案 0 :(得分:2)

我会做什么,我不知道这是否是最好的做法,是传递模型,然后将视图模型的属性绑定到模型上的(可能映射的)属性。这样您就可以通过视图模型获得更新。它确实对线程问题保持一定的开放性,但您可以使用deliverOn:来确保始终在主调度程序上提供更新。