Objective c 跨多个NSManagedObject上下文的NSManagedObject之间的关系
我的应用程序使用多个线程,每个线程有一个托管对象上下文 为了清楚起见,我将不同的托管对象上下文称为:moc1、moc2等等 假设我们有两个模型,具有简单的一对多关系:Objective c 跨多个NSManagedObject上下文的NSManagedObject之间的关系,objective-c,core-data,relationship,nsmanagedobject,nsmanagedobjectcontext,Objective C,Core Data,Relationship,Nsmanagedobject,Nsmanagedobjectcontext,我的应用程序使用多个线程,每个线程有一个托管对象上下文 为了清楚起见,我将不同的托管对象上下文称为:moc1、moc2等等 假设我们有两个模型,具有简单的一对多关系: User 1----* Document 当用户登录时,我从其中一个上下文(例如moc1)获取相应的模型 (伪代码) 然后我存储这个用户,以便以后可以引用它 在应用程序的另一部分中,我需要循环遍历数组中的数千项,并为其创建文档对象。然后,每个文档都需要绑定到当前用户。这发生在不同的后台线程中(它有自己的上下文) 正如您所看到的,
User 1----* Document
当用户登录时,我从其中一个上下文(例如moc1)获取相应的模型
(伪代码)
然后我存储这个用户,以便以后可以引用它
在应用程序的另一部分中,我需要循环遍历数组中的数千项,并为其创建文档对象。然后,每个文档都需要绑定到当前用户。这发生在不同的后台线程中(它有自己的上下文)
正如您所看到的,我希望避免每次都必须在当前上下文中获取新用户
问题是,globallogeduser是moc1的一部分,而新文档是moc2的一部分(或moc3、moc4等,取决于线程)
那么最好的方法是什么呢?我如何全局保存/缓存一个对象,然后使用同一个对象在不同的上下文中绑定关系,而不必每次都获取该对象
感谢您提供的任何帮助。您没有错,不能跨线程使用同一个NSManagedObject 使用线程限制时,不应在线程之间传递托管对象或托管对象上下文。要跨线程边界从一个上下文向另一个上下文“传递”托管对象,您可以:
- 在接收托管对象上下文时,传递其对象ID(objectID)并使用objectWithID:或existingObjectWithID:error: 必须已保存相应的托管对象。不能将新插入的托管对象的ID传递给其他上下文
- 在接收上下文上执行提取
UserModel *globalLoggedUser = ( Fetch the logged in user using moc1 )
for( NSString *documentName in documents) {
( Create new document using moc2 )
** THIS IS WHERE MY PROBLEM IS **
// What I currently do:
UserModel *tempUser = ( Fetch the logged in user using moc2 )
( bind new document to tempUser )
// What I would like to do:
( bind new document to globalLoggedUser )
// Note that in this case tempUser and globalLoggedUser are the same user, except they are attached to different contexts.
}