在嵌套上下文之前,我的生活很容易从 NSManagedObjects 声明一些常用函数,例如:
- awakeFromFetch
- 从插入唤醒
- 验证X
- didChangeValueForKey
通过尝试和失败,称之为人生课程。在对我的实体使用继承时,我学会了对这些功能更加小心。
现在跳转到 Core Data 的嵌套上下文部分,我已经习惯了在多个上下文中看到相同的 NSManagedObject。我试图抓住其中的一个关键部分:上面提到的函数可能会在不同的上下文中被多次调用,但是验证、值观察和初始化等事情只相关一次。因此,我通常会检查 self.managedObjectContext 是否对应于我使用的主要上下文。如果它们相同,则运行整个函数,否则,我只需调用 [super] 并返回。
这是我应该处理嵌套上下文的方式吗?
这样做已经救了我好几次。我很惊讶看到 awakeFromInsert 为同一个对象调用了不止一次,但即使我在除主要上下文之外的所有上下文中中止该函数的初始化部分,信息也会持久化回存储区。我想确认一下我正在以正确的方式处理这个话题。
更新:
为了阐明我的想法,我在我的博客中写了一篇关于这个主题的文章。我在那里写的内容使我多次避免无效的实体布局和其他错误。但是我不确定是否有比我更好的方法。
http://www.digital-lumberjack.com/blog/2012/11/surviving-core-data/