2017-03-08 7 views
1

Ich bin ein wenig verwirrt, wie man das in CoreData modelliert? Es ist ein ziemlich einfaches Konzept, ich möchte in der Lage zu verfolgen, wie lange ein Spieler in einem bestimmten Spiel gespielt hat. Also ich habe die folgenden Objekte (der Kürze wegen vereinfacht):CoreData und Zwischenprodukte

Player 
- name 
- currentGamePlayedTime 
(1:1 relationship to Team) 

Team 
- name 
(1:1 relationship with Player) 
(1:Many relationship with Game 

Game 
    - date 
    (Many:1 relationship with Team) 

Ich möchte in einem bestimmten Spiel bei einem Spieler die Spielzeit in der Lage zurück zu blicken, oder sehen Sie die Spielzeit des ganzen Teams in einem Spiel. Aber ich bin mir nicht sicher, wie ich das modellieren soll. Mit einem SQL-Ansatz hätte ich eine Zwischentabelle (siehe unten) und hätte etwa 15 Einträge, einen für jeden Spieler, der im Spiel gespielt hat und die entsprechende Zeit, in der er gespielt hat.

GameRecord 
- GameID 
- PlayerID 
- TimePlayed 

Meine App ist zum Training der Lage, wie viel ein Spieler im aktuellen Spiel gespielt hat, und speichern Sie es auf dem Player-Objekt zur Zeit, aber ich weiß nicht, die langfristige Lösung, die Spielzeit zu einem entsprechenden Einsparung Spielobjekt - ob direkt auf dem Objekt oder über ein Zwischenprodukt.

Ich habe gesehen, dass einige people do use intermediates. Aber ich habe auch gelesen, dass die Verwendung von SQL-Praktiken nicht die Schreibweise ist, um über das Objektdiagramm nachzudenken. Ich wollte nur eine Vorstellung davon haben, wie so etwas aussehen sollte.

Antwort

1

Die Verwendung intermediärer Entitäten zum Modellieren vieler Beziehungen ist vollkommen legitim. In der Tat ist es in Situationen wie der Ihren notwendig, Informationen über die Beziehung selbst zu speichern.

Es gibt ein Beispiel dafür in der Core Data Programming Guide, im Abschnitt "Modellierung einer Beziehung basierend auf ihrer Semantik" (was auch immer das bedeutet). Ihr Beispiel ist eine reflexive Beziehung, aber das Argument gilt für jede Viele-Viele-Beziehung.

+0

Vielen Dank dafür, ich bin froh, den Ansatz identifiziert zu haben! :-) Also nachdem ich all meine Spuren im Spiel gemacht habe und am Ende habe ich alle meine Spieler und alle ihre Zeit gespielt. Was wäre der Prozess, um das Zwischenprodukt zu erstellen? Schließe ich einfach die Spieler an und lasse gameRecord = GameRecord (Kontext: managedObjectContext), gameRecord.playedTime = 15, gameRecord.playRelationshipName = Spiel, gameRecord.playerRelationship = Player, versuche ManagedObjectContext.save() .. ' – Jonnny

+1

Ja, genau. Die umgekehrten Beziehungen, die to-many sein sollten, werden von CoreData automatisch aktualisiert. – pbasdf

+0

Vielen Dank! :-) – Jonnny