2017-03-08 4 views
1

CoreDataでこれをどのようにモデル化するのか少し混乱しますか?それはかなり単純な概念です、私は、プレーヤーが特定のゲームでどれだけ長くプレイしたかを追跡できるようにしたいと考えています。だから私は(簡潔にするために簡略化)以下のオブジェクトを持っている:私は、特定のゲームでは、プレイヤーの再生時間を振り返って、またはゲーム内のチーム全体の再生時間を見ることができるようにしたいCoreDataと中間体

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) 

。しかし、私はそれをどのようにモデル化するのか分かりません。 SQLのアプローチを使用すると、中間テーブル(下に示す)があり、ゲームでプレイした各プレーヤーとそれがプレイした対応する時間に15のエントリがあります。

GameRecord 
- GameID 
- PlayerID 
- TimePlayed 

私のアプリは、プレーヤーが現在のゲームに出場し、現在Playerオブジェクトの上にそれを格納しているどのくらいのワークアウトにできますが、私は相当にその再生時間を節約するために長期的な解決策を知りませんゲームオブジェクト - オブジェクト上にあるのか中間オブジェクトを介しているのか。

私はいくつかを見ましたpeople do use intermediates。しかし、私はまた、SQLプラクティスを使用することは、オブジェクトグラフについて考える覚書ではないことも読んでいます。だから、このようなものをどのようにモデル化すべきかという考えがほしいと思っていました。

答えて

1

多数の関係をモデル化するために中間エンティティを使用することは、完全に正当です。実際、あなた自身のような状況では、関係自体に関する情報を保存する必要があります。

Core Data Programming Guideの「そのセマンティクスに基づいた関係のモデリング」というタイトルのセクション(これが意味するもの)の例があります。それらの例は反射的な関係ですが、引数は多対多の関係に適用されます。

+0

ありがとうございます。私はこのアプローチを特定してうれしいです! :-)だから私はゲームですべての追跡をした後、私はすべてのプレイヤーとすべてのプレイタイムを持っています。中間体を作るプロセスは何でしょうか。 'playerRecord = GameRecord(context:managedObjectContext)、gameRecord.playedTime = 15、gameRecord.gameRelationshipName = Game、gameRecord.playerRelationship = Player、managedObjectContext.save()を試してみましょう。 ' – Jonnny

+1

はい、まさにそうです。逆関係は、to-manyでなければならず、CoreDataによって自動的に更新されます。 – pbasdf

+0

ありがとう! :-) – Jonnny

関連する問題