ios - 可以将 NSmanagedObject 移动到另一个 NSManagedContext 吗?

标签 ios objective-c cocoa-touch core-data

我有两个 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/

相关文章:

ios - 无法更改 SKView 背景颜色

iphone - 用 block 简化委托(delegate)方案——在这种情况下是否可能?

ios - 设置 SKShapeNode 一个角的半径

ios - 是否可以编辑 UIAlertAction 标题字体大小和样式?

ios - 调整 UIPopoverController 的大小

objective-c - 在 TextView 后面添加背景图片

objective-c - 在一对一关系的核心数据删除过程中查找 NSManagedObject 时出现问题

ios - 在 Xcode 8 中添加开发团队?

ios - iOS:录制的音频在Chrome上可以正常播放,但在Safari上不能正常播放

ios - 有没有办法在ios中动态更改应用程序图标?