1

バックグラウンド スレッドでデータを解析し、新しいエンティティを挿入し、他の既存のエンティティとの関係を設定しています。

「異なるコンテキストでオブジェクト間の関係を確立しようとしています」というエラーが表示されることがあります。

これについて詳しく読んだ後、バックグラウンド スレッドで新しい ManagedObjectContect を作成し、それを使用して新しいエンティティを挿入し、関係を設定しています。この新しい ManagedObjectContext のみをバックグラウンド スレッドで使用するように注意しています。既存のオブジェクトとこれらの新しいオブジェクトの 1 つとの関係を設定するために既存のエンティティを見つける必要がある場合、[moc objectWithId:id] を呼び出して、新しい moc を使用して既存のオブジェクトをフェッチします。ただし、まだエラーが発生しています。

イライラして、私は物事を印刷し始めました。リレーションシップを設定する直前に、各 NSManagedObject の managedObjectContext プロパティを出力すると、「(null)」が出力されることがあります。これは、問題が発生したときのようです。

誰が私が間違っているのか教えてもらえますか? オブジェクトに (null) モックが時々あるのはなぜですか?

あなたが与えることができるどんな助けにも感謝します!

4

3 に答える 3

1

最も可能性の高い説明は、あるコンテキストで作成され、他のコンテキストとマージされていないオブジェクトにリンクしようとしていることです。コンテキストがマージされるまで、あるコンテキストで行われた変更は別のコンテキストに表示されません。それはあなたのエラーメッセージがあなたに伝えていることです。

Nullオブジェクトは、一時的なobjectIDを使用していることが原因である可能性があります。オブジェクトが永続ストアに保存されるまで、objectIDは固定されません。それまでは、保存時に変更される一時的なIDがあります。

于 2010-12-01T20:31:14.517 に答える
0

NSmanagedObject には isInserted というメソッドがあります。これは、オブジェクトが managedObjectContext に挿入されているかどうかを確認し、この値を確認します。挿入されていない場合は、NSManagedObjectContext の挿入メソッドを使用して挿入します。

于 2010-12-01T00:58:04.087 に答える
0

あなたのコードの一部を確認する必要があります。私の最初の考えは、そのプロパティを介して、または直接に managedObjectContext にアクセスしているかどうかを確認することでしょうか?

Apple が提供するテンプレート コア データ メソッドを使用している場合、プロパティ経由でアクセスすると、新しい管理対象オブジェクトを作成するときにコンテキストが常に利用可能 (つまり、nil ではない) になります。

于 2010-12-01T00:21:54.413 に答える