1

1 つの ToDo オブジェクトがあり、1 つの Report オブジェクトを作成しています。どちらも同じ NSManagedObjectContext の異なる MOC の NSManagedObject create です。明確にするために、NSManagedObjectContext は PersistenceStore クラスの ivar です。

ToDo オブジェクトは、NsPresistentStoreCoordinator に保存されたオブジェクトを含む配列を返す PersistenceStore のメソッドを継承する配列から取得されました。todo オブジェクトは、レポートを初期化するクラスに属性として渡されます。

レポート クラスは、次のコード行で PersistenceStorage NSManagedObject の MOC から初期化されます。

NSManagedObjectContext *context = [store managedObjectContext];
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:context];

Todo オブジェクトと Report オブジェクトは 1 対 1 の関係にあります。しかし、関係を設定しようとすると、エラーが発生しました

<\NSInvalidArgumentException> 異なるコンテキスト内のオブジェクト間に関係 'todo' を確立しようとする不正な試み

私の考えでは、同じ NSManagedObjectContext を使用しています。いくつかは私を助けることができますか?

4

2 に答える 2

1

別のエンティティのコンテキストを検索:

NSManagedObjectContext *context = [store managedObjectContext];

 NSManagedObject *ctx = [context existingObjectWithID:[todo objectID] error:&error];
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:ctx];
于 2012-11-05T15:06:42.500 に答える
0

解決策を見つけました。NeverBeの回答の一部を使用しました。

NSManagedObjectContext *context = [store managedObjectContext]; 
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:context]; 
NSManagedObject *object = [context objectRegisteredForID:[currentTodo objectID]]; 
[report setTodo:((ToDo*) object)];

私が NeverBe の回答を使用しなかった理由は、 Report オブジェクトが同じコンテキストで他の関係を持っているためです。Todo オブジェクトのコンテキストをコピーすると、残りの関係で同じ問題が発生します。

于 2012-11-06T22:52:59.920 に答える