1

2つのコアデータエンティティ間に1対多の関係があります。 (Bのオブジェクトが自分のしている間、Aの削除を拒否すなわち)拒否削除CoreData関係の検証エラー処理

B - > A:

を無効化 - >> B

A - >> B以下のように

複数のコンテキストでは、1つのコンテキストが他の変更を認識していないため、その場合、親コンテキストを保存する際に検証エラーが発生します。

妥当性検査エラーの処理方法に関する情報はほとんど提供されていませんが、ほとんどの例ではエラーが表示され、変更が破棄されます。私はその特定の親オブジェクトの削除を元に戻す必要がある場合は?

検証エラーを処理する方法はありますか? NSValidationRelationshipDeniedDeleteError

+0

あなたは 'mergeChangesFromContextDidSaveNotification'を使って他のコンテキストで何が起こっているのか追跡することができます –

答えて

0

変更を失うことなく特定のオブジェクトだけの削除を元に戻す方法が見つかりませんでした。したがって、childContextの親エンティティを削除してからchildContextを保存した場合、削除されたエンティティは自動的に​​に追加されます。私は異なるアプローチを試みましたが、parentContextから削除操作を取り消すことができた唯一の方法はparentContext.refreshObject(deletedParent, mergeChanges: false)です。

これは本当にあなたが何をしようとしているかによって変わります(ビジネスはここで大きな影響を受けます)。しかし、私はあなたが楽観的に働くべきだと思う:https://en.wikipedia.org/wiki/Optimistic_concurrency_control 時々、競合が発生した場合は、トランザクションをロールバックして再起動しても問題ありません。

通常、childContextは、parentContext(子が優先度が高い)の変更を上書きします。したがって、あなたのアプリのアーキテクチャは同じように動作するはずです。 childContextのエンティティを削除するときは、新しい子エンティティを挿入したために拒否ルールが停止しても、parentContextのエンティティも削除する必要があります。挿入したエンティティを削除して親エンティティを削除する必要があります。それ以外の場合は、アプリケーションのアーキテクチャをrestadyする必要があります。