self.managedObjectContext 和 managedObjectInstance.managedObjectContext 有啥区别?

Posted

技术标签:

【中文标题】self.managedObjectContext 和 managedObjectInstance.managedObjectContext 有啥区别?【英文标题】:What is the difference between self.managedObjectContext and managedObjectInstance.managedObjectContext?self.managedObjectContext 和 managedObjectInstance.managedObjectContext 有什么区别? 【发布时间】:2013-05-18 16:22:31 【问题描述】:

所以,我有 CoreData 实体 BookBookmarkHighlight。一本书包含有关该书的信息和BookmarksNSSet

我想删除一本书中的书签,然后立即用我的集合重新填充它们。

这是我从另一个项目中获得的代码,我似乎无法理解他们为什么使用不同种类的deleteObject 方法。

他们会这样:

for (Bookmark *bookmark in book.bookmarks) 
    [bookmark.mamagedObjectContext deleteObject:bookmark];

使用self.managedObjectContextbookmark.managedObjectContext 有什么区别。此外,两者似乎都对内容没有任何影响,并且在尝试删除 forin 循环中的所有书签然后再次通过 forin 循环添加新集时出现错误。

如果需要更多信息,请在 cmets 中提及。

【问题讨论】:

不应使用for 循环,因为不允许forin 循环修改集合。 @sosborn 这在 CD 中完全正确,因为对象仅被标记为删除。当生命周期结束时,CD 会删除持久存储中的对象。 【参考方案1】:

managedObjectInstance.managedObjectContext 返回注册接收器的托管对象上下文。

换句话说,例如,如果您在主线程上下文(与在主线程中创建的上下文相关联)中创建了一个书签,bookmark.managedObjectContext 将指向它。

您是否使用不同的线程?不同的语境?你有什么类型的错误?分享它,为您的问题添加编辑。

【讨论】:

以上是关于self.managedObjectContext 和 managedObjectInstance.managedObjectContext 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:无法获取 managedObjectContext 和模型

为啥我的核心数据保存缓慢?

将图像保存到核心数据?

CoreData - 重复现有对象

核心数据数据加密

CoreData简单使用