2017-11-28 16 views
0

iOSアプリケーションは、2つのコアデータエンティティ(従業員と部門)でうまく機能しています。 私は1つのUITableViewControllerを持っています。これはNSFetchedResultsControllerDelegateで、Employeesとそのデータを表示し、もう1つはDepartmentsとそのデータを表示します。コアデータと多対多

どのように私は理解するのが苦労していますの関係を追加します。 (データモデルのグラフビューを使用して)リレーションシップを作成する方法を理解していますが、実際のリレーションシップを追加するための良い情報はありません。

標準のSQLデータベースでは、DepartmentIDとEmployeeIDの列を使用して相互参照テーブルをリンクします。しかし、それはコアデータでは適切ではないようです。

Swiftでエンティティリレーションシップを追加するにはどうすればよいですか?

let employeeBob: Employee = ... 
let departmentHR: Department = ... 
employeeBob.mutableSetValue(forKey: "departments").add(departmentHR) 

その後、あなたが要求してemployeeBob.departmentsでボブの部署にアクセスしたり、departmentHRを要求することにより、HRの従業員を取得することができます:

+0

「HR」部門と従業員「Bob」がある場合、「HR」部門に「Bob」を追加する方法を質問しています。よく)? – ghostatron

+0

@ghostatronはい、まさに。 (もちろん、HRのすべての従業員とBobが関連付けられているすべての部門を見つける方法) –

+1

私はそれが嫌いですが、私が見つけた唯一の方法は、employeeBob.mutableSetValue(forKey: "departments")。add(hrDepartment)。それはあなたのための逆の更新を処理する必要があります。その後、hrDepartmentを持つセットを取得するためにemployeeBob.departmentsを呼び出すことができます。 – ghostatron

答えて

1

あなたはこのスニペットに似た何かをすることによって、mutableSetValueを利用することができます。従業員。 (つまり、スニペットでも逆も処理されます)

ボブがすでにHRになっているかどうかを確認するには、departmentHR.employees.contains(employeeBob)があるかどうかを確認します。ただし、参照(従業員IDやその他ではありません)でチェックするので注意してください。つまり、Bobを2回(NSManagedObjectIdが異なる2種類のNSManagedObjects)作成すると、「一致」しません。それはセットなので、あなたがボブがボブだと知っているならば(ボブを見るたびに同じボブオブジェクト/参照)、彼を何度も追加することができ、セットは自動的にあなたをダイスから守ります。

関連する問題