Appleのドキュメントでは見つけられないシンプルで一般的なパターン:
- CoreDataストアをロードする
- 新しいデータをダウンロードし、メモリ内にオブジェクトを作成します
- 新しいデータの一部をストアに保存します(通常は「変更されていない新しいビット/ビットのみ」)
代わりに、私はこれらの選択肢を見つけることができますが、どれも正しくありません:
- メモリ内にオブジェクトを作成しないでください(これは、オブジェクトの優れた点をすべて破棄することを意味します。CoreDataの障害を回避する以外の目的を果たさない多くのNSDictionaryを使用してコードを記述します。一般的には機能しません)
- オブジェクトを作成しますが、不要なオブジェクトは削除します(Appleはドキュメントでこれを提案していますが、通知はひどく間違っています。保存しようとすると、保存しようとすると表示されますが、保存できない/できません)
- セカンダリコンテキストでオブジェクトを作成する(Appleはこれが正しいことを強く示唆していますが、上記を実行せずに、オブジェクトを一時コンテキストから実際のコンテキストに移動する方法を提供していないようです(作成したオブジェクトを削除してから、オブジェクトは多くの場合、新しいコンテキストの参照に接続する必要があり、保存は失敗するため、これは一般的には不可能です)
確かに、これほど難しいことではないでしょうか?
オブジェクトを手動でディープコピーするためにすべてのコードを作成する必要がある場合(すべてのフィールドとデータ構造を反復処理することにより)、そもそもCoreDataが存在するのはなぜですか?これは、CDが内部で提供する基本的な機能です。
私がこれまで取り組んできた唯一の解決策は、オプション2(Appleのドキュメントから)であり、Appleが最初に保存されるべきではなかったオブジェクトのNSNotificationsを送信するときに「推測」するカスタムヒューリスティックを使用します(ただし、Appleはとにかくnotoficationsを送信します)。それは恐ろしいハックです。
編集:説明:
Appleの通知を正しく配信する方法がわかりません。Appleのコードは、挿入を「更新」に変換し、「一時的なオブジェクト」を「削除」に変換するようです。「新しいオブジェクト」を聞くことができません。