ドキュメントからと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ブロック内で返されたオブジェクトのプロパティにアクセスし、スローされた例外をキャッチして、nil
(as is done here)で置き換えられましたが、try-catchはObjective -Cとこれは実際のように思える 悪いアイデア。
子コンテキストが保存され、 'NSManagedObjectContextDidSaveNotification'通知をポストするときに' mergeChangesFromContextDidSaveNotification: 'を実行していますか? – dtrotzjr
@dtrotzjr:はい、そうです。 – Isaac
コードを表示してもらえますか?あなたが間違ってできることはたくさんあります。あなたの実際のコードを見ることなく、これは推測ゲームです。 1つの可能性は、performBlock:を使用して保存し、performBlock:が実行される前に親コンテキストでオブジェクトIDを使用することです。試しにあなたのアイデアは悪いです。試してはいけない。 try catchで症状を修正する代わりに根本的な問題を解決してください。 –