指向 performBlock 之外的 NSManagedObject 的指针

Posted

技术标签:

【中文标题】指向 performBlock 之外的 NSManagedObject 的指针【英文标题】:Pointer to a NSManagedObject outside a performBlock 【发布时间】:2017-01-05 14:26:20 【问题描述】:

假设我在私有 NSManagedObjectContext 上的 performBlock 中获取了一个 NSManagedObject。 我还在 AppDelegate 中保存了 NSManagedObject 的指针。所以基本上我把它放在'主线程'上。 这会导致任何问题吗? 请注意,我总是访问提交到正确上下文的 performBlock 中的属性。

【问题讨论】:

对于CoreData,你不能在线程之间传递对象,而是传递它的ObjectID并从其他线程的数据存储中再次获取。 【参考方案1】:

不,你不能那样做。从不同的上下文中对对象的引用可能会使您的应用程序崩溃。

对此有多种解决方案。例如,您的全局变量可能是一个独特的属性,您可以使用它在正确的上下文中获取对象。

某些操作可能在与保存全局对象的上下文相同的上下文中完成。

最后,您还可以使用objectID 在上下文之间传递对象,这是一种不透明类型NSManagedObjectID。您可以使用object(with:) 在特定线程中初始化本地对象。

【讨论】:

以上是关于指向 performBlock 之外的 NSManagedObject 的指针的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 的 performBlock: 和故障

NSThread gtm_performBlock 错误

只能在使用队列创建的 NSManagedObjectContext 上使用 -performBlock:

NSManagedObjectContext: performBlockAndWait vs performBlock 通知中心

在 performBlock 中分配时 NSManagedObjectContext nil

NSManagedObjectContext 和 performBlock,iOS 8 上的变化?