2012-09-19 9 views
9

ドキュメントからとthis answerから私の理解では、データが存在する場合、NSManagedObjectContextのexistingObjectWithID:error:objectWithID:メソッドが同じオブジェクトを返す必要があることですが、データが」doesnの存在しない場合、existingObjectWithID:error:nilを返し、objectWithID:はデータの代わりにフォルトを持つオブジェクトを返します。existingObjectWithID:エラー:戻りはnilが、objectWithIDは:実際に使用可能なオブジェクトを返します

アプリケーションで表示されるのは、子管理対象オブジェクトコンテキスト内のバックグラウンドスレッドでオブジェクトを作成して保存した後、メインスレッドに移動して保存し、オブジェクトIDを子コンテキストから親オブジェクトコンテキストへ)、existingObjectWithID:error:nilを返しますが、objectWithID:は、有効なデータではなく、実際の使用可能なオブジェクトを返します。

2つの方法について私の理解は間違っていますか?私は何か間違っているのですか?

(私はexistingObjectWithID:error:のreturns- nil -when-there's-NO-データの振る舞いをしたいが、新しく作成されたオブジェクトのデータを取得できないことが問題である。)


編集objectWithID:を使用して、try-catchブロック内で返されたオブジェクトのプロパティにアクセスし、スローされた例外をキャッチして、nilas is done here)で置き換えられましたが、try-catchはObjective -Cとこれは実際のように思える 悪いアイデア。

+0

子コンテキストが保存され、 'NSManagedObjectContextDidSaveNotification'通知をポストするときに' mergeChangesFromContextDidSaveNotification: 'を実行していますか? – dtrotzjr

+0

@dtrotzjr:はい、そうです。 – Isaac

+0

コードを表示してもらえますか?あなたが間違ってできることはたくさんあります。あなたの実際のコードを見ることなく、これは推測ゲームです。 1つの可能性は、performBlock:を使用して保存し、performBlock:が実行される前に親コンテキストでオブジェクトIDを使用することです。試しにあなたのアイデアは悪いです。試してはいけない。 try catchで症状を修正する代わりに根本的な問題を解決してください。 –

答えて

1

一時的なオブジェクトIDに問題がある可能性があります。オブジェクトIDは、ストアに保存されるまで永続的ではありません。ですから、あなたは親オブジェクトを保存する前か後に、子オブジェクトのオブジェクトからオブジェクトIDをいつ取得するのですか?

親を保存する前にこれを行うと、親が永続的なストアコーディネータで構成され、別の親ではなく結果がストアに保存される場合は、一時オブジェクトIDが表示されます。そして、アップルによって私たちに開示されていない理由のいくつかは、オブジェクトIDの作品から管理されたオブジェクトを返すメソッドの1つですが、もう1つはそうではありません。

関連する問題