0

単純なデータ モデルがあります。子エンティティとのオプションの 1 対多の関係にある親エンティティです。逆の関係 (子 -> 親) は必須です (オプションではありません)。

子オブジェクトが削除された後、Core Data は保存を拒否し、子エンティティに必要なプロパティがないことを訴えます。逆の関係をオプションにすると、エラーはなくなります。

論理的な (つまり、子には親が必要な) 必須の逆関係を持たないのはなぜですか? Core Data が削除されたオブジェクトの不一致について文句を言うのはなぜですか? これは予想される動作ですか?

明確にしていただきありがとうございます。

編集: 要求に応じて、テスト データ モデルの写真を含めます: 削除コードに関する質問はありません。これはすべて、アプリケーション ウィンドウ nib で設定されたバインディングによって行われます。ここでテスト プロジェクトを読み込むことができます: Parent-child test project。このプロジェクトが建築に基づいていることは、おそらく言及されるべきでしょう。
親子 Core Data モデルのテスト
NSArrayControllerNSPersistentDocument

私が観察した動作は次のとおりです。親が子なしで作成された場合、ドキュメントは通常どおり保存できます。子が作成されてから削除された場合、ドキュメントを保存しようとするとエラー メッセージが表示されます。
親子エラーメッセージ

4

3 に答える 3

3

私は自分の質問に対する答えを見つけたところです。

関連から削除した後にオブジェクトが長引くことで私が観察していた問題は、コントローラーとメソッドNSArrayControllerのデフォルトの操作に関連しています。Appleドキュメント(NSArrayController -removeObject:method)によると: -remove:-removeObject:

ただし、レシーバーのcontentSetがリレーションシップにバインドされている場合、removeObject:はデフォルトで、オブジェクトをリレーションシップからのみ削除します(オブジェクトグラフからは削除しません)。ただし、contentSetバインディングに[削除時にオブジェクトを削除]オプションを設定することはできます。この場合、オブジェクトは、リレーションシップから削除されるだけでなく、削除対象としてマークされます。

これはメソッドにも同様に当てはまります-remove:。子アレイコントローラのcontentSetバインディングで「削除時にオブジェクトを削除」を設定すると、問題が解決します。

于 2012-06-25T18:06:55.053 に答える
0

追加情報を見ると、削除ルールが 1 つ浮かびます。

あなたの関係のCascade設定で何が起こるかを少し考えてみましょう.children

Child deleted --> cascade = parent deleted --> possible other orphaned children

多分それが起こっていることですか?デリート ルールを に設定してみてくださいNullify

于 2012-06-24T04:51:49.680 に答える
0

もしかして逆にわかった?

childの親に対する一対一の関係はオプションであってはなりません。
の子に対する対多関係は、オプションである必要があります。

このセットアップをテストしたところ、動作します。

于 2012-06-22T21:33:24.657 に答える