指向 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 的指针的主要内容,如果未能解决你的问题,请参考以下文章
只能在使用队列创建的 NSManagedObjectContext 上使用 -performBlock:
NSManagedObjectContext: performBlockAndWait vs performBlock 通知中心