NSManagedObjectContext
のチェーンを使用して、ロールバック/キャンセルできるビューとアクションの階層を表しています。 これは一例です: のは、私は次のような構造を持っているとしましょう:親NSManagedObjectContextを使用しているときのワークフローを修正します
- クライアントリスト(メインNSManagedObjectContext)
- クライアントの詳細(DetailContext - 親= MainContext)
- クライアント食料品(GroceryContext - 親= DetailContext )
- 食料品のお支払い(PaymentContext - 親= GroceryContext)
この方法で、私は食料品paymenにナビゲートすることができます変更を行い、必要に応じてキャンセルします。他のすべてのレベルで同じことを行います。保存を実行するとレベルを上げると変更が移動します。これまでのところ、これは期待どおりに動作しています。私は理解して欲しい
は、次の操作を行うには良い方法です:
- を開き、リスト上のクライアントを。
- 食料品を開きます。
- オープン食料品の支払いレコード
- トランザクションを追加
事は、このトランザクションは、同様のバックエンドに保存され、ローカルメインコンテキストに保存する必要があること、である何があったので、私残りのワークフローでは、そのトランザクションが行われました。
私がやっていることは、トランザクションが行われた場合、一連のデリゲートがすべての親コンテキストであるルートレベルまで呼び出され、トランザクションを保存することです。しかし、私はそれを行うより良い方法があるのだろうかと思っています。トランザクションが完了しても、途中で行われた他の変更を取り消すことができます。しかし、これらすべてのコンテキストは、最終的なので、トランザクションのために保存されたコンテキストの更新されたオブジェクトを持つ必要があります。
クライアント - 食料品の実際の使用例には添付しないでください。これはコンテキストの階層レベルを説明するためのものです。これらすべてのネストされた子のコンテキストを使用して
おかげ
私はあなたの提案を理解していますが、なぜそれが間違ったアプローチだと思いますか? 最初の画面で取り消すことができるネストされた一連の画面がある場合、たとえば:4つのコンテキストの「レイヤー」があり、次に4番目のコンテキストで1つの変更を行い、それを保存してから3番目それを保存しますが、2番目のコンテキストでは、ユーザーはトランザクション全体を取り消すことを決定します。私は、このようなUXのための良い解決策として親のコンテキストがチェーン化されているのを見ますか?この方法では、すべてのステップが確認されれば、永続化されることになります(これはUXが必要とするものです)。 – Wak
https://developer.apple.com/reference/coredata/nsmanagedobjectcontext コーディネーターの代わりに親コンテキスト。このパターンには、次のような使用シナリオが多数あります。 2番目のスレッドまたはキューでバックグラウンド操作を実行する。 インスペクタウィンドウやビューなど、破棄可能な編集を管理する。 – Wak
私はちょうどそのような複数のネストされたコンテキストを持つ不必要に複雑なアプローチのように思える。いずれの場合も、 'managedObjectContextDidSaveNotification:'通知を使用して、トランザクションの変更を他のすべてのコンテキストにマージします。各子供は親の貯蓄を監視し、その変更を引き出す必要があります。 – trapper