6

コアデータで簡単な削除を実行しようとしていますが、これについて少しアドバイスが必要です。

トランザクション、名前、イベント、および日付エンティティを持つモデルがあります。トランザクションには、他の各エンティティへのリンクがあります。

アプリでは、ユーザーがテキスト フィールドに情報を追加すると、それが 4 タブ テーブル ビュー コントローラーに保存されます。

最初のタブは、Transaction Entity の fetchRequest で NSFetchedResultController を使用しています。2 番目のタブは名前エンティティを使用しており、3 番目のタブはイベントを使用しており、4 番目のタブは日付エンティティを使用しています。

[トランザクション] タブからエントリを削除すると、意味のあるトランザクションだけが削除されます。

私が欲しいのは、[名前] タブから人を削除したり、[イベント] タブからイベントを削除したり、アプリのモデルを通じてカスケードしたりできるようにすることです。したがって、ボブが複数のトランザクションを持っている場合、トランザクション タブを削除すると、その 1 つのトランザクションが削除されます。

名前タブから BOB を削除すると、すべての日付とトランザクションで彼が参加したすべてのイベントから彼を削除する必要があります。

イベントや日程についても同様です。

編集:データモデルを含めるように更新

注: Year エンティティは実験的なものであり、現在は使用されていません ここに画像の説明を入力 。このようなことを行うにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

まず、日付をエンティティに抽象化することの賢明さがわかりません。多分あなたは私を啓発することができます。私の考えでは、日付は取引に属します。日付タブでは、トランザクションを取得する必要がありますが、それらをグループ化して異なる方法で表示します。

Person-to-Transactions 関係をカスケードする方法を知っていると思います。これにより、個人に関連付けられたすべてのトランザクションが削除されます。同じことがイベントにも当てはまります。

ただし、逆方向のカスケードはより問題があります。それが対多関係の最後のメンバーであるかどうかを何らかの方法で確認し、そうである場合にのみ削除する必要があります。これを行う 1 つの方法は、セッターをオーバーライドすることです。生成された NSManagedObject サブクラスには、セットからオブジェクトを追加または削除するためのセッター (対多関係) を含む、自動生成されたセッターがあります。

-(void)removeTransactionsObject:(Transaction *)value {
    [super removeTransactionsObject:value];
    if (!self.transactions.count) {
       [self.managedObjectContext deleteObject:self];
    }
}
于 2013-12-11T20:10:29.850 に答える