追加、更新されたレコードがあります。次に、それらをサーバーと同期します。サーバーの応答によると、そのうちの1つが更新に失敗した場合は、そのNSManagedObjectを以前の値に戻したいと思います。調べてみると、UndoManagerはスタックとして機能しているので、Idのあるレコードを見つけられず、そのレコードを元に戻すことができません。
そして最後に、この問題について何を提案しますか?
追加、更新されたレコードがあります。次に、それらをサーバーと同期します。サーバーの応答によると、そのうちの1つが更新に失敗した場合は、そのNSManagedObjectを以前の値に戻したいと思います。調べてみると、UndoManagerはスタックとして機能しているので、Idのあるレコードを見つけられず、そのレコードを元に戻すことができません。
そして最後に、この問題について何を提案しますか?
独自のID属性を導入し、それをサーバーと同期することで、オブジェクトを追跡できます。これはしっかりした頑丈なデザインだと思います。私はこれを何度も問題なく使用しました。
Appleは各管理対象オブジェクトにobjectIDを提供していますが、これは実際には、さまざまな管理対象オブジェクトのコンテキスト間でデータの一貫性を確保することを目的としています。このIDを外部システムに「悪用」することはお勧めしません。
サーバーは(更新されなかったというメッセージとともに)古い値を提供し、ID属性を使用してレコードを検索してCoreDataストアに書き戻すことができます。よりきめ細かい変更と更新の管理のために、タイムスタンプ属性を使用することもできます。