2017-11-10 1 views
1

Ich habe Core Data verwendet, um meine Datenbank zu modellieren. Ich habe 2 Entitäten, die in vielen Beziehungen stehen. Jede Person kann viele Adressen haben, und an jeder Adresse können mehrere Personen leben.Hinzufügen von Eigenschaften zu vielen zu vielen Beziehungen?

Jetzt möchte ich Eigenschaft zu dieser Beziehung hinzufügen. Zum Beispiel eine Person - Adresse wird Label zu Hause haben, andere Person - Adresse kann Label Mamas Platz haben.

Ich kann diese Eigenschaft nicht auf address entity hinzufügen, weil die gleiche Adresse unterschiedliche Bezeichnungen für verschiedene Personen haben wird.

Da Beziehungen wie NSSet s modelliert sind, sehe ich keinen Weg, um zu tun, was ich will.

Kann das irgendwie gemacht werden?

Antwort

2

Es ist nicht möglich, Attribute direkt zu einer Viele-Viele-Beziehung hinzuzufügen. Der von Apple empfohlene Ansatz (siehe "Modelling a relationship based on its semantics" im CoreData-Programmierhandbuch) besteht darin, die Viele-Viele-Beziehung durch eine zwischengeordnete Entität zu ersetzen, der Sie die Attribute hinzufügen. Jede Ihrer vorhandenen Entitäten hat eine Eins-Viele-Beziehung mit der neuen Entität.

In Ihrem Fall könnten Sie so etwas wie dieses:

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

Sie können die label Attribut auf die PersonAddressDetails Einheit dann hinzuzufügen.

+0

gibt es eine einfache Möglichkeit, die PersonAddressDetails für eine bestimmte Kombination aus Adresse und Person zu extrahieren, oder müssten Sie die Menge aus einer extrahieren und darüber iterieren, um auch die andere zu erhalten? – alionthego

+1

@alionthego Ich denke, Sie könnten die Swift-Schnitt Methode für die beiden Sets verwenden, um das Objekt PersonAddressDetails zu erhalten, das sowohl für die Person als auch für die Adresse gilt. Oder Sie könnten mit einem geeigneten Prädikat die relevante Person und Adresse angeben. Aber ich neige dazu, eine Menge mit einem Prädikat zu filtern, das das andere Objekt angibt. – pbasdf

+0

danke für deinen Vorschlag. Eine schnelle Schnittmenge wäre perfekt, aber sie funktioniert nur bei Mengen, nicht bei Mengen, bei denen die Beziehungsobjekte gespeichert sind. Ich nehme an, ich könnte das auf ein Set übertragen, bin mir aber nicht sicher, ob das funktionieren wird. Was die Filtertechnik angeht, gehe ich davon aus, dass Sie zuerst eine veränderbare Kopie des nsset erstellen? als jemand, der nicht oft mit Sets arbeitet, würde das eine Kopie der Kerndatenobjekte in dem Set erzeugen? Das will ich definitiv nicht. Ich möchte, dass die gefilterten Objekte an das ursprüngliche Objekt geändert werden. Vielen Dank. – alionthego

Verwandte Themen