我正在学习如何使用多个托管对象上下文,以及在练习中
let childContext =
NSManagedObjectContext(
concurrencyType: .mainQueueConcurrencyType)
childContext.parent = coreDataStack.mainContext
let childEntry =
childContext.object(with: surfJournalEntry.objectID)
as? JournalEntry
detailViewController.journalEntry = childEntry
detailViewController.context = childContext
detailViewController.delegate = self
我碰到了这些话:
您必须使用object(with :)来检索日记条目,因为 托管对象特定于创建它们的上下文。
我被困了,因为我无法理解为什么严格禁止将你从一个MOC传递给另一个MOC的托管对象。如果有人知道为什么你能分解它吗?
答案 0 :(得分:2)
核心数据不是线程安全的。这就是它。
如果您在多个线程上使用对象或方法并且它们不是线程安全的,那么您就是在设置灾难。损坏的数据和应用程序崩溃很常见。更糟糕的是,它们可能不会一直发生,或者可能在不同的时间发生在不同的用户身上。任何多线程代码都是如此,而不仅仅是核心数据。
这不是那条消息告诉你的。它说" ...托管对象特定于创建它们的上下文。" 这是一个完全不同的事情。
获取托管对象时,可以使用托管对象上下文来执行此操作。上下文是托管对象与底层持久性存储文件之间的链接。如果您尝试将托管对象与其他某些上下文一起使用,则该上下文对此没有任何了解。它无法以任何方式使用该对象。很难说出你的代码发生了什么,但这就是消息的含义。