我正在尝试解决在这种情况下出现的问题:
- 用户可以从外部源发起数据加载,加载数据时,通过CoreData保存。然后它显示在一些视图中,并且一些其他类得到了对 NSManagedObjects 的引用。
- 数据加载可以由其他条件启动(例如,当应用程序从后台恢复时)。接收到新的外部数据,dataController 删除以前的数据并创建新数据。这就是问题所在。我想通知所有数据消费者类他们应该加载新实例(向他们发送对已删除对象的引用,以便他们可以将引用与他们拥有的引用进行比较,并确定他们是否要求新的数据版本)。但是在删除消费者类引用了没有属性的故障后,它的 ObjectID 就没有用了(因为保存了新实例),我不知道如何加载它的新版本。
我可以实现一些 NSManagedObject 包装器:
@interface Model : NSObject
- (id)initWithUniqueId:(id)uniqueId dataObject:(NSManagedObject *)dataObject;
@property (nonatomic, strong, readonly) id uniqueId;
@property (nonatomic, strong, readonly) NSManagedObject *dataObject;
@end
该对象可以在 dataObject 发生故障后自行重新加载。但也许这种方法是错误的,不需要这种开销?而 NSManagedObject 只有在真正被删除而不是更新的情况下才应该被删除?然后如果对象被更新,我们可以使用 KVO 来处理属性的变化,如果对象被删除,我们可以观察 NSManagedObjectContext 的变化通知并寻找被删除的对象。
我只是想知道您更喜欢哪种方式以及为什么(也许您喜欢其他方式)?提前致谢。