2011-04-01 24 views
0

因此,我試圖與武器和附件進行一對多和多對多的關係,實際上更多,但在這裏保持簡單。我可以製造一個一對多的武器實體,用於特定的武器,如m16和ak47。然後,我可以創建一個具有特定實體(如抑制器和紅點瞄準器)的一對多連接實體。然後我可以添加關係,如從m16到紅點的反向關係。核心數據vs plist:製作武器和附件

所以我相信我可以使用核心數據的編輯器來製作這個圖表,但我不確定我是否可以使用它。如果我希望用戶能夠選擇m16,然後選擇適當的附件,我將如何從核心數據中讀取它?我不認爲我可以這樣做,因爲我實際上並沒有用所有可能的附件製作m16對象。我真的希望這是有道理的。

我開始製作所有這些信息的plist,但這很糟糕,因爲現在我有很多我需要手工製作的多對多關係。

我只是在尋找某種方向的路要走,所以我不花費一堆時間去效率最低的方式。

+0

這不清楚你在這裏問什麼。 – Caleb 2011-04-02 00:04:08

回答

3

如果您想在模型對象之間建立關係,請遠離plists。

對於您的特定情況,您希望創建兩個實體及其各自的屬性:WeaponAttachment。的關係如下圖所示:

武器< < - >>附件

附件< < - >>武器

所以在概念上你的武器,可以有許多附件和附件,可以是許多武器的一部分。

考慮到這一點,您可以使用您選擇的Weapon實例填充數據庫,並且可以使用Attachment執行相同的操作。

一旦這樣做了,你只需通過分配關係的附件武器(或通過反向關係附加武器附件)。

最後要回答你的問題,如果你想要一個用戶選擇一個特定的Weapon實例,然後選擇它的附件,只要你已經有可供選擇的附件實例,這就像抓住對武器的引用一樣簡單實例,獲取所有附件並將其作爲選項呈現給用戶。

那些讓糾察隊被添加到關係中,你準備好了。

檢查由蘋果公司爲一些代碼,可以幫助你前進的道路上提供的配方例子。如果你想要去那麼簡單那就算了CoreData

[編輯,以解決下方的註釋]

。只需爲你的突擊步槍製作一個plist,並使用兩把鑰匙,一個用於突擊riffle名稱(NSString *),另一個用於附件(NSArray *),製作每個assalt riffles一個NSDictionary。舉例:

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 - 它可以是一個數組或字典。

+0

我真的不想創建任何對象/武器實例。我只想從核心數據中獲取字符串信息。就像我想擁有一系列突擊步槍一樣,我只是想爲每個槍的名字列出一串字符串。所以像NSDictionary *武器= [NSDictionary dictionaryWithContentsOfFile:[self dataFilePath]];然後像NSArray * assaultRifles = [武器allObjects]; assaultRifles只是一個字符串名稱列表。 – tazboy 2011-04-02 04:27:27

+0

感謝您關於如何組織一切的見解。我感謝您的幫助。 – tazboy 2011-04-02 16:48:12