Ios 为什么NSManagedObject实例永远不应该从一个线程传递到另一个线程?
我正在学习如何使用多个托管对象上下文,并且正在演练中Ios 为什么NSManagedObject实例永远不应该从一个线程传递到另一个线程?,ios,multithreading,core-data,nsmanagedobject,Ios,Multithreading,Core Data,Nsmanagedobject,我正在学习如何使用多个托管对象上下文,并且正在演练中 let childContext = NSManagedObjectContext( concurrencyType: .mainQueueConcurrencyType) childContext.parent = coreDataStack.mainContext let childEntry = childContext.object(with: surfJournalEntry.objectID) as? JournalEntry
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
我遇到了这样的话:
必须使用对象(带:)检索日记账分录,因为
托管对象特定于创建它们的上下文
我被绊倒了,因为我不明白为什么严格禁止将一个托管对象从一个主运行中心传递到另一个主运行中心。如果有人知道为什么,请您将其分解?核心数据不是线程安全的。差不多就是这样 如果您在多个线程上使用对象或方法,而它们不是线程安全的,那么您正在设置一个灾难。数据损坏和应用程序崩溃很常见。更糟糕的是,它们可能不会一直发生,也可能在不同用户的不同时间发生。这适用于任何多线程代码,而不仅仅是核心数据 但这并不是那个信息告诉你的。它说“……托管对象特定于创建它们的上下文。”这是完全不同的事情
获取托管对象时,使用托管对象上下文来执行此操作。上下文是托管对象和底层持久存储文件之间的链接。如果您试图将托管对象与其他上下文一起使用,则该上下文对此一无所知。它不能以任何方式使用对象。很难从代码中判断这是在哪里发生的,但这就是消息的意思。核心数据不是线程安全的。差不多就是这样 如果您在多个线程上使用对象或方法,而它们不是线程安全的,那么您正在设置一个灾难。数据损坏和应用程序崩溃很常见。更糟糕的是,它们可能不会一直发生,也可能在不同用户的不同时间发生。这适用于任何多线程代码,而不仅仅是核心数据 但这并不是那个信息告诉你的。它说“……托管对象特定于创建它们的上下文。”这是完全不同的事情 获取托管对象时,使用托管对象上下文来执行此操作。上下文是托管对象和底层持久存储文件之间的链接。如果您试图将托管对象与其他上下文一起使用,则该上下文对此一无所知。它不能以任何方式使用对象。很难从代码中看出这是在哪里发生的,但这就是消息的含义