4

我有一个视图,我从 main 中检索保存的实体 (Route *) NSManagedObjectContext。我想将其导入到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

在我尝试将parentContextmytempContext设置为主 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,但它会崩溃。有什么想法吗?提前致谢!

4

1 回答 1

8

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

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

但不是两者兼而有之。

于 2013-10-07T04:57:47.203 回答