在 CoreData 中建立关系
Posted
技术标签:
【中文标题】在 CoreData 中建立关系【英文标题】:Make relationship in CoreData 【发布时间】:2014-03-06 12:20:37 【问题描述】:我有玩家实体和游戏实体。
一个玩家对多个游戏的关系。
所以玩家有位置属性
进攻 防御当我创建球员并将该球员添加到球队时,我会设置进攻或防守位置。
但是对于不同的比赛,球员可以有进攻位置或防守位置,并且这个位置不能被球队中的球员覆盖。所以如果我用位置进攻创造了10号球员,它就不能被修改,因为球队中的每个球员都有自己的位置。但是对于游戏,我们可以根据需要为玩家设置新的位置。因此,假设对于 id = 10 的游戏,我有 id = 7 的玩家,其位置 = 进攻,但我希望玩家 id = 7 的玩家在 id = 12 的游戏中拥有位置防御。
对于 id 为 10 的游戏,我们有位置进攻玩家
Game
id = 10
player.id = 7
player.position = offense
对于 id 为 12 的游戏,我们为同一个玩家设置了阵地防守
Game
id = 12
player.id = 7
player.position = defense
所以如您所见,我使用不同的游戏,但使用相同的玩家,如果我将新参数设置为 player.position,我将覆盖以前的值,这是不好的,因为它将只存储最新的位置,当我将获取玩家时,我将有最后修改位置的玩家。
我想这是下一个方法:
我有玩家实体,所以要在短号游戏中为每个玩家制作不同的位置,我必须复制这个实体并设置我想要的位置,但是我会复制玩家的问题并不好,因为更好的方法是为每个游戏使用相同的玩家(一个玩家),并使用另一个对象来为具体玩家保存具体游戏的参数。
这有意义吗?或者也许我需要另一种方法来解决这个问题。无论如何,我认为最好的方法是不重复播放器。
【问题讨论】:
您是否考虑过使用实体“玩家属性”或“玩家技能”来保存位置和其他属性以及 player.id 等数据?并让您的实体游戏像这样游戏 id = 10 player.id = 7 playerSkill.position = offence playerSkill.idplayer = 7 playerSkill.speed = 9 ....???? 不确定我是否完全理解设置,但也许你可以在游戏和玩家之间引入第三个实体,也许称之为 PlayerPosition。它将引用游戏和玩家,以及玩家在比赛中的位置。这样一来,球员的原始位置将被单独保留,然后您可以查询他在防守端打球的各个球员。 @SonGoku68 是的,我认为每个玩家都应该拥有一对多的关系。正如您的建议,一名球员将拥有许多技能。我对吗?我会为每场比赛参数化这项技能。对吗? 是的,没错,我会写在一个答案的解决方案中 @mMo 因为我认为拥有额外实体的最佳方式将具有玩家 ID 游戏 ID 和新位置 【参考方案1】:我对这些情况的解决方案应该是这样的
Game
id = 10
player.id = 7
playerSkill.position = offense
playerSkill.idPlayer = 7
playerSkill.speed = 9
Player
id
name
nationality
...
PlayerSkill
position
idPlayer
speed
....
因此,您将为每个游戏拥有一个具有他技能的玩家,您可以为同一玩家创建新游戏并创建新技能
【讨论】:
以上是关于在 CoreData 中建立关系的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIPickerView 建立 CoreData 关系