2017-11-10 3 views
1

私は自分のデータベースをモデル化するためにコアデータを使用しています。私は多対多の関係にある2つのエンティティを持っています。それぞれの人は多くの住所を持つことができ、それぞれの住所に複数の人が住むことができます。多対多リレーションシップにプロパティを追加しますか?

今、私はこの関係にプロパティを追加したいと思います。たとえば、1人の人の住所には自宅のラベルが付き、他の人の人の住所にはラベルのママの所在地が表示されます。

住所のエンティティにこのプロパティを追加することはできません。同じ住所には、異なる人物のラベルが異なるためです。

関係はNSSetのようにモデル化されているので、私は自分がしたいことをする方法を見ません。

これは何とかできますか?

答えて

2

多対多の関係に属性を直接追加することはできません。アップルが推奨する手法(CoreData Programming Guideの"Modelling a relationship based on its semantics"を参照)は、多数のリレーションシップを中間エンティティに置き換えることです。アトリビュートを追加します。既存のエンティティのそれぞれは、新しいエンティティと1対多の関係を持ちます。

Person  <--->> PersonAddressDetails <<---> Address 

あなたはその後、PersonAddressDetailsエンティティにlabel属性を追加することができますあなたの場合は

は、あなたがこのような何かがあるかもしれません。

+0

与えられたAddressとPersonの組み合わせに対してPersonAddressDetailsを簡単に抽出する方法はありますか?それとも1つからセットを抽出し、それを反復して他のものに属するものを取得する必要がありますか? – alionthego

+1

@alionthego人と住所の両方に共通のPersonAddressDetailsオブジェクトを取得するために、Swift交差メソッドを2つのセットで使用できると思います。または、関連するPersonおよびAddressを指定する適切な述部でフェッチできます。しかし、私は、他のオブジェクトを指定する述語で1つのセットをフィルタリングする傾向があります。 – pbasdf

+0

あなたの提案に感謝します。スウィフト交差点は完璧ですが、セット上でのみ動作し、nssetsではなく、リレーションオブジェクトが保存されます。私はそれをセットにキャストすることができますが、それがうまくいくかどうかはわかりません。フィルタ技術については、最初にnssetの可変コピーを作成すると仮定していますか?セットで頻繁に作業しない人は、セット内のコアデータオブジェクトのコピーを作成しますか?私は間違いなくそれを望んでいない。フィルタリングされたオブジェクトの変更を元のオブジェクトに反映させたい。ありがとう。 – alionthego

関連する問題