所以我试图与武器和附件建立一对多和多对多的关系,实际上更多但是在这里保持简单。我可以制作一对多武器实体,用于特定武器,如m16和ak47。然后我可以制作一对多的附件实体,它具有像抑制器和红点瞄准器这样的特定实体。然后我可以添加从m16到红点的反向关系。
所以我相信我可以使用核心数据的编辑器制作这个图表,但我不确定我是否真的可以使用它。如果我希望用户能够选择m16然后选择适当的附件,我将如何从核心数据中读取这些内容?我认为我不能,因为我实际上并没有使用所有可能的附件制作m16对象。我真的希望这是有道理的。
我开始制作所有这些信息,但这很糟糕,因为现在我需要手工制作许多多对多的关系。
我只是想在去的路上寻找某种方向,所以我不会花很多时间去效率最低的方式。
答案 0 :(得分:3)
如果您想在模型对象之间建立关系,请远离plist。
对于您的特定情况,您希望创建两个具有各自属性的实体:Weapon
和Attachment
。关系如下所示:
武器< - >>附件
附件<< - >>武器
所以从概念上讲,你拥有的武器可以有许多附件,附件可以是许多武器的一部分。
考虑到这一点,您使用您选择的Weapon
个实例填充数据库,并且可以使用Attachment
执行相同操作。
一旦完成,您只需通过关系为武器分配附件(或通过反向关系将武器附加到附件)。
最后回答您的问题,如果您希望用户选择某个Weapon
实例然后选择其附件,只要您已经有可供选择的附件实例,这就像抓取参考一样简单到武器实例,获取所有附件并将其作为选项呈现给用户。
那些得到纠察的人会加入到这段关系中,你准备好了。
查看Apple提供的配方示例,了解可能对您提供帮助的一些代码。
[编辑以下评论]
如果你想这么简单,那就忘了CoreData。只需为你的突击步枪创建一个plist,并使用两个键将每个assalt riffles作为NSDictionary,一个用于攻击浅滩名称(NSString *),另一个用于其附件(NSArray *)。一个例子:
weapon1 {
name: @"Weapon name here"
attachments: [
item0: @"Attachment 1"
item1: @"Attachment 2"
item2: @"Attachment 3"
...
]
}
weapon2 {
... // Keep adding weapon names & attachments
}
然后你可以将武器1,武器2等放入NSArray中将它们组合在一起。假设上面的武器都是冲锋枪,所以这可能成为你的AssaultRiffles plist,可以使用标准的KVC方法加载和访问。这是一个例子:
NSArray *weaponArray = // Method to load your plist here
for (NSDictionary *weapon in weaponArray)
{
NSString *weaponName = [weapon objectForKey:@"name"];
NSLog (@"weaponName is %@", weaponName);
}
如果您不希望每种武器类型使用单独的plist,可以根据需要将它们全部放在一个数据集中 - 它可以是数组或字典。