我有两个 NSManagedContext,一个父子,一个用于并发。像这样指定:
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
self.backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
self.backgroundContext.parentContext = self.managedObjectContext;
在我的一个 View Controller 中,我调用了这个方法:
[Stream followingStreamForUser:self.user fromDictionary:dict inManagedObjectContext: [AppController sharedAppController].backgroundContext];
调用此方法会导致以下错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship '[...]' between objects in different contexts
似乎 self.user
不在我的 backgroundContext
中。我想知道是否可以将我的 self.user
对象移动到我的 backgroundContext
或者是否可以查看我的用户对象何时何地添加到上下文 X。
最佳答案
如果您尝试在错误的上下文中使用 NSManagedObject,您将在保存时遇到异常。
如果您需要从临时上下文访问现有对象,则需要使用对象的 ID 来获取新实例,如下所示:
NSManagedObject *user = ...;
NSManagedObject *userInBackgroundContext = [backgroundContext objectWithID:[user objectID]];
然后当您保存后台上下文时,更改会持久保存到商店中,您只需要将这些更改返回到您的主上下文中即可。
关于ios - 可以将 NSmanagedObject 移动到另一个 NSManagedContext 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383606/