2014-02-24 44 views
0

我有一个数据模型,我没有反向关系,我不知道是否有办法解决这个问题,因为XCode抱怨和Apple说实体应该有一个逆。CoreData没有反比关系

我通过json api获得了一些玩家统计数据。为了简化它,Player有3个游戏模式别名Kits的一些统计。每个Kit具有相同的属性,诸如name,scoretime

的JSON看起来像这样

{ "player": { "uid": "123456", "name": "FooBar", "kits": { "support": { "id": 32, "score": 0, "stars": 0, "name": "Support", "time": 0, "spm": 0 }, "assault": { "id": 1, "score": 27624, "stars": 0, "name": "Assault", "time": 5329, "spm": 311.022706 }, "engineer": { "id": 2, "score": 44639, "stars": 0, "name": "Engineer", "time": 5758, "spm": 465.151094 } } } }

和我的模型是这样

model http://f.cl.ly/items/0G2T1c0r3r1r2a3K1k10/Screen%20Shot%202014-02-24%20at%2017.13.28.png

有了这个,我可以使用代码访问Kits

Player *player = .... Kit *supportKit = player.kits.support; ... // do whatever I want with the support kit

问题是,我的模型是错的?如何在核心数据模型中建立关系“一对多”但限于给定数量和订购事项的关系。

欢呼声, 扬

+0

您需要有一个从套件到玩家的关系(从套件到套件)。他们在文档中给出各种各样的理由。但是我知道有时这很不方便。在这种情况下,我会在名称前加上一个'z'(比如“zplayer”),这样它就不会出现。 – datinc

回答

0

我只看到在数据2页的表 - 玩家和 “试剂盒”,它包括3种类型的ID = 1 =攻击,ID = 2 =工程师和id的= 32是支撑。

您需要建立两个表格之间的反比关系,因此person_to_kit为1到多个,而kit_to_person为1到1. ....关系是虚拟的,不基于任何特定的字段,但您的单独表格需要键被指定。

+0

Person_to_kit和Kit_to_person是您必须在核心数据中手动指定的关系。尽管Core_data可以使用SQLLite作为基础数据库,但它并不是真正的关系数据库,因此不需要外键 - 尽管SQLLite中定义的表可能会有一个系统生成一个。 – Paulo

+0

您应该编辑自己的答案,而不是将注释添加到答案中。 –

0

首先,您应该在核心数据中始终保持相反的关系。即使你不使用这种关系 - 核心数据会。

其次,核心数据不是数据库。这是一个对象图,可以坚持数据库。因此,您不需要外键或ID或其他任何东西来表示关系。关系细节由Core Data处理。

如果这不是一个需要迁移的现有应用程序,那么只需在模型中添加一个反向关系并将其设置为反向。你不需要使用它,你不需要设置它或以任何方式触摸它。把它放在核心数据。