1

私はNSIncrementalStore、REST サービスに支えられた を作成中です。オブジェクトの POST および GET ではうまく機能しますが、それらを DELETE すると、次の問題が発生します。

  1. テスト通話[context delete: object];
  2. context.deletedObjects含むobject(予想通り)
  3. テスト通話[context save: &error];
  4. iOS は;でNSIncrementalStoresexecuteRequest:withContext:error:を呼び出します。呼び出しが と の両方にNSSaveChangesRequest到着したとき、私のコードはサーバーからどのオブジェクトを削除するかを見つけることができません。context.deletedObjects == nilsaveChangesRequest.deletedObjects == nil

コンテキストの呼び出しとその呼び出しの間にdeletedObjects設定されるのはどうしてですか?nilsaveNSIncrementalStore

UPDATE考えられる原因:object.objectIDはまだtemporaryID次のsave. はNSIncrementalStore現在、オブジェクト ID を取得してnewObjectIDForEntity:referenceObject:おり、Apple のドキュメントからの説明はまだ適用されていないようです。

管理オブジェクト コンテキストに挿入された新しいオブジェクトには一時 ID が割り当てられます。この ID は、オブジェクトが永続ストアに保存されると永続 ID に置き換えられます。

4

1 に答える 1

-1

問題は、フェッチ中に (永続的な) オブジェクト ID を再作成するのに十分な情報をサーバーにまだ保存していなかったことです。

これにより、次の問題が解決されNSIncrementalStoreます。

  • executeRequest:withContext:error:受信するNSSaveChangesRequestと、(私の場合) 保存されたオブジェクトから参照文字列を抽出し、referenceObjectForObjectID:これらを (オブジェクトの他の属性と共に) サーバーに保存します。

  • executeRequest:withContext:error:受信するNSFetchRequestと、サーバーから参照文字列を (オブジェクトの他の属性とともに) 取得し、 を使用してオブジェクトを再作成します[context objectWithID: [self newObjectIDForEntity: entity referenceObject: referenceString]]

于 2015-03-04T11:41:51.803 に答える