0

我正在尝试解决在这种情况下出现的问题:

  1. 用户可以从外部源发起数据加载,加载数据时,通过CoreData保存。然后它显示在一些视图中,并且一些其他类得到了对 NSManagedObjects 的引用。
  2. 数据加载可以由其他条件启动(例如,当应用程序从后台恢复时)。接收到新的外部数据,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 的变化通知并寻找被删除的对象。

我只是想知道您更喜欢哪种方式以及为什么(也许您喜欢其他方式)?提前致谢。

4

1 回答 1

1

如果您使用的是外部数据源,那么您自己的某种唯一 ID 版本是有意义的。

然后一切都变得简单。您在保存上下文时加载数据、更新持久存储,并通过NSNotificationCenter. 现在,所有侦听器都可以通过重新获取来简单地更新他们的数据。

(实现委托方法的获取结果控制器甚至不必通过通知中心通知。)

于 2013-09-05T10:38:01.633 回答