应在更新数据时删除/插入与更新NSManagedObjects

时间:2013-09-05 10:34:16

标签: ios core-data

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

  1. 用户可以从外部源启动数据加载,加载数据时,可以通过CoreData保存。然后它会显示在某些视图中,而其他一些类则会引用NSManagedObjects。
  2. 可以通过其他条件启动数据加载(例如,当应用程序从后台恢复时)。接收到新的外部数据,dataController删除先前的数据并创建新数据。这就是问题所在。 我想通知所有数据使用者类他们应该加载新实例(将它们发送给已删除对象,这样他们就可以将引用与他们拥有的对象进行比较,并确定他们是否要求新数据版本)。但删除后,消费者类引用了没有属性的错误,它的ObjectID没用(因为保存了新实例),我不知道如何加载它的新版本。
  3. 我可以实现一些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通知以获取更改并查找已删除的对象。

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

1 个答案:

答案 0 :(得分:1)

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

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

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