ios - 无法将 parentContext 添加到 NSManagedObjectContext,上下文已经有一个协调器

标签 ios objective-c core-data

我有一个 View ,我从主 NSManagedObjectContext 中检索保存的实体(Route *)。我想将其导入 tempContext。按照 Marcus Zarra 的示例,我这样做:

    NSManagedObjectContext *moc = _route.managedObjectContext;
    NSManagedObjectID *routeId = [_route objectID];
    NSPersistentStoreCoordinator *psc = moc.persistentStoreCoordinator;
    self.tempContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [self.tempContext setPersistentStoreCoordinator:psc];
    NSManagedObject *localRoute = [self.tempContext objectWithID:routeId];
    [localRoute moToDictionary:localRoute];
    self.tempContext.parentContext = moc; // crashes here

一切都很好,直到我尝试将我的 tempContextparentContext 设置为主 MOC。我收到错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Context already has a coordinator;  cannot replace.'

我知道它告诉我不能更改 persistentStoreCoordinator。但是我不确定为什么它会告诉我。当我设置断点时,tempContext 与主 moc 位于不同的内存地址。此外,self.tempContext.parentContext 为零。所以我想如果它是 nil,我可以将 nil 参数设置为 moc,但它崩溃了。有什么想法吗?提前致谢!

最佳答案

对于托管对象上下文,您可以

  • 要么设置持久存储协调器,以获得第二个独立的 MOC 同一家店,
  • 或设置父上下文以获取子 MOC,

但不是两者都是。

关于ios - 无法将 parentContext 添加到 NSManagedObjectContext,上下文已经有一个协调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19217280/

相关文章:

IOS 推送通知错误

ios - Cordova/Phonegap 忽略 iOS 上 config.xml 中的全屏首选项

ios - 如何使用 Swift scenekit 在 IOS 上绘制相机视频作为背景?

iphone - 如何去除iPhone应用程序中图像的背景?

objective-c - 具有条件值的 Objective C 中的常量

xcode - 只有唯一属性的核心数据获取实体

ios - 如何判断 iOS 用户在最初启用 iCloud 日历后是否禁用了它

objective-c - 本地通知?

ios - 在 Swift 3 中引用实体属性(核心数据)

Swift - 核心数据中的一对多关系