所以我试图用武器和附件建立一对多和多对多的关系,实际上要多得多,但这里要保持简单。我可以创建一个一对多的武器实体,用于特定的武器,如m16和ak47。然后,我可以创建一个具有特定实体的一对多附件实体,如suppressor和red dot sight。然后我可以添加关系,比如从m16到红点的反向关系。
因此,我相信我可以使用核心数据的编辑器来制作这个图表,但我不确定我是否真的可以使用它。如果我希望用户能够选择一个m16,然后选择适当的附件,我该如何从核心数据中读取它呢?我认为我做不到,因为我实际上并没有创建包含所有可能附件的m16对象。我真的希望这是有意义的。
我开始制作所有这些信息的plist,但这很糟糕,因为现在我有很多需要手动创建的多对多关系。
我只是在寻找前进的方向,这样我就不会花很多时间走效率最低的道路。
发布于 2011-04-02 08:04:48
如果你想在你的模型对象之间建立关系,请远离plist。
对于您的特定情况,您希望创建两个具有各自属性的实体:Weapon和Attachment。关系如下图所示:
武器<<-->>附件
附件<<-->>武器
所以从概念上讲,你的武器可以有很多附件,而且附件可以是许多武器的一部分。
考虑到这一点,您可以使用您选择的Weapon实例填充您的数据库,并且可以对Attachment执行相同的操作。
完成后,您只需通过关系将附件分配给武器(或通过反向关系将武器附加到附件)。
最后,回答您的问题,如果您希望用户选择某个Weapon实例,然后选择其附件,假设您已经有可用的附件实例可供选择,这就像抓取对武器实例的引用一样简单,获取所有附件并将它们作为选项呈现给用户。
那些得到纠察权的人被添加到关系中,你已经准备好了。
查看Apple提供的食谱示例,以获得一些可能对您有所帮助的代码。
在下面编辑您的评论
如果你想这么简单,那就忘了CoreData吧。只需为您的突击步枪创建一个plist,并使每个辅助步枪都有两个键,一个用于突击步枪的名称(NSString*),另一个用于其附件(NSArray*)。举个例子:
weapon1 {
name: @"Weapon name here"
attachments: [
item0: @"Attachment 1"
item1: @"Attachment 2"
item2: @"Attachment 3"
...
]
}
weapon2 {
... // Keep adding weapon names & attachments
}然后,您可以将weapon1、weapon2等放入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,简单地根据你的需要将它们全部嵌套在一个数据集中-它可以是一个数组或字典。
https://stackoverflow.com/questions/5520037
复制相似问题