ios - 在 CoreData 中建立关系

标签 ios core-data magicalrecord

我有 Player 实体和 Game 实体。

一个玩家与多个游戏的关系。

所以Player有position属性

  • 进攻
  • 防守

当我创建球员并将该球员添加到球队时,我会设置位置进攻或防守。

但对于不同的游戏,球员可以有进攻位置或防守位置,并且该位置不能为球队中的球员覆盖。所以如果我用位置进攻创建了 10 号球员,它就不能修改,因为球队中的每个球员都有适当的位置。但是对于游戏,我们可以根据需要为玩家设置新的位置。因此,假设对于 id = 10 的游戏,我有 id = 7 的玩家,位置 = 进攻,但我希望这个玩家 id = 7 的玩家在 id = 12 的游戏中有位置防守。

对于 id 为 10 的游戏,我们有 position offense the player

Game
id = 10
player.id = 7
player.position = offense

对于 id 为 12 的游戏,我们对同一个玩家进行位置防守

Game
id = 12
player.id = 7
player.position = defense

所以正如你所看到的,我使用不同的游戏,但使用相同的玩家,如果我将新参数设置为 player.position,我将覆盖以前的值,这是不好的,因为它只会存储最新的位置,当我获取玩家时,我将拥有最后修改位置的玩家。

我想这是通过下一种方式实现的:

我有玩家实体,所以要在短号游戏中为每个玩家设置不同的位置,我必须复制这个实体并设置我想要的位置,但问题是我会复制玩家并且这不好,因为更好的方法是在每个游戏中使用同一个玩家(一个玩家),并使用另一个对象来为具体玩家保存具体游戏的参数。

有意义吗?或者我可能需要另一种方法来解决这个问题。无论如何,我认为最好的方法是不重复播放器。

最佳答案

我对这些情况的解决方案应该是这样的

Game
id = 10
player.id = 7
playerSkill.position = offense
playerSkill.idPlayer = 7 
playerSkill.speed = 9

Player
id
name
nationality
...

PlayerSkill
position
idPlayer
speed
....

因此,每个游戏都会有一个具有其技能的玩家,并且您可以为同一玩家创建新游戏并创建新技能

关于ios - 在 CoreData 中建立关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224349/

相关文章:

ios - 在 TodayExtension 中使用 MagicalRecord (CoreData)

ios - Xamarin.ios 构建因 HEALTHKIT 引用而被拒绝

ios - 更改状态栏颜色 Objective-C

ios - 使用Core Data和Ensembles(iCloud)删除几乎重复的副本

iphone - NSManagedObjectContext executeFetchRequest 返回不稳定的对象,导致 EXC_BAD_ACCESS、SIGABRT 等

ios - 从 IOS 上安装的应用程序中删除旧的未使用的 .mom(d) 文件?

ios - 映射核心数据的最佳库

ios - UITabBarController 在 Storyboard的上方添加新的 UIViewController (Swift)

objective-c - 在 Objective-C 中获取方法的返回类型的方法?

cocoa - 如何将 NSKeyedUnarchive NSManagedObject 的子类导入到 Core Data 中?