9

ドキュメントとこの回答からの私の理解では、データが存在する場合、NSManagedObjectContext のメソッドexistingObjectWithID:error:objectWithID:メソッドは同じオブジェクトを返す必要がありますが、データが存在しない場合existingObjectWithID:error:は返されますが、データの代わりに障害のあるオブジェクトが返されますnilobjectWithID:

私がアプリケーションで見ているのは、(子マネージド オブジェクト コンテキスト内のバックグラウンド スレッドでオブジェクトを作成して保存した後、メイン スレッドに移動して保存し、オブジェクト ID を子コンテキストから親オブジェクト コンテキスト) をexistingObjectWithID:error:返しますnilが、objectWithID:フォールトではなく、有効なデータを持つ実際に使用可能なオブジェクトを返します。

2 つの方法についての私の理解は間違っていますか? 私は何か間違ったことをしていますか?

(私は return nil--when-there's-no-data の動作がexistingObjectWithID:error:必要ですが、新しく作成されたオブジェクトのデータを取得できないことが問題です。)


編集: を使用objectWithID:して、すぐに try-catch ブロック内で返されたオブジェクトのプロパティへのアクセスをテストし、スローされた例外をキャッチし、偽造されたオブジェクトをnil(ここで行われているように) に置き換えることができると思いますが、try-catch は高価ですObjective-Cとこれは本当に悪い考えのようです。

4

1 に答える 1

1

問題は、一時オブジェクト ID にある可能性があります。オブジェクト ID は、ストアに保存されるまで永続的ではありません。問題は、いつ子コンテキストの管理対象オブジェクトからオブジェクト ID を取得するか、つまり親を保存する前か後かということです。

親を保存する前にこれを行うと (親が別の親ではなく永続ストア コーディネーターで構成されている場合、ストアに保存されることになります)、おそらく一時的なオブジェクト ID を取得します。また、Apple によって開示されていないいくつかの理由により、オブジェクト ID から管理対象オブジェクトを返すメソッドの 1 つが機能しますが、もう 1 つのメソッドは機能しません。

于 2013-12-20T11:44:30.107 に答える