4

main から保存された Entity (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

をメイン MOCparentContextに設定しようとするまでは、すべて問題ありません。tempContextエラーが発生します:

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

を変更できないと言っているのは理解していpersistentStoreCoordinatorます。しかし、なぜそれが私にそれを言っているのか私にはわかりません。ブレークポイントを設定するとtempContext、メイン モックとは異なるメモリ アドレスになります。また、self.tempContext.parentContextはゼロです。したがって、nil の場合、nil パラメータを moc に設定できると思いますが、クラッシュします。何かご意見は?前もって感謝します!

4

1 に答える 1

8

管理オブジェクト コンテキストでは、次のことができます。

  • 同じストアを持つ 2 番目の独立した MOC を取得するために、永続ストア コーディネーターを設定するか、
  • または、親コンテキストを設定して子 MOC を取得します。

両方ではありません。

于 2013-10-07T04:57:47.203 に答える