2013-02-25 16 views
0

我是iOS初學者。我找到的每一個資源都只有plists內部的字符串中的關鍵字符串對。在plist中嵌入數組到字典結構中

<key></key> 
<string></string> 

我想知道是否有可能在結構中的一個對象是一個密鑰對,其中對象是一個數組。在我的plist中,我有一個結構如下。第一個字典保存可變數量的可能或不可能出現在plist中的密鑰字符串對。我的代碼檢查是否存在某些鍵。但是,我想添加一個數組,它將包含所需的最初字典數量。下面的代碼不起作用,但這是我希望能夠做到的。

<array> 
    <dict> 
     <key>title</key> 
     <string>SomeTitle</string> 
      . 
      . 
      . 
     <key>filters</key> 
     <array>??? 

     </array>??? 
    </dict> 
</array> 
+0

是的,你可以有一個數組在詞典中的值。使用Xcode的plist編輯器來執行此操作。或者至少用它來讓你開始。比編輯原始XML要少得多的錯誤。 – rmaddy 2013-02-25 19:24:44

+0

plists將被放置在服務器上,由其他開發人員編寫,無需訪問xcode或一般的mac。所以我一直在尋找正確的方式來編碼XML,然後用代碼解析它。 – Hub3rt 2013-02-25 19:30:53

+0

這很好。在Xcode中創建一個示例plist,並將其用作您需要在沒有Xcode的情況下創建的實際plist文件的基礎。 – rmaddy 2013-02-25 19:34:12

回答

0

plist中爲你能夠加載使用initWithContentsOfFile:方法plist文件,它需要一個適當的plist文件。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
     <key>PageTitle</key> 
     <string>Title</string> 
     <key>Filters</key> 
     <array> 
      <dict> 
       <key>Filter</key> 
       <string>SomeFilter</string> 
       <key>Param</key> 
       <string>SomeParam</string> 
      </dict> 
     </array> 
    </dict> 
</array> 
</plist> 

另外,該線路:

NSMutableArray* filters = [[[NSMutableArray alloc] initWithArray:[dict objectForKey:@"Filters"]] retain]; 

應該僅僅是:

NSMutableArray* filters = [dict[@"Filters"] mutableCopy]; 
+0

好吧生病嘗試第二行謝謝。我應該添加plist頭文件,我只是重複了數組部分,它確實具有適當的plist格式,這就是我的錯誤。 – Hub3rt 2013-02-25 20:01:11

+0

這實際上回答了我的原始問題,即如何在plist中獲取數組,因此我接受。字典變量仍然只包含'PageTitle'鍵,沒有'過濾器',但這是一個不同的問題。 – Hub3rt 2013-02-25 20:08:56

0

使用

<key>SomeKey</key> 
<array> 
</array> 

我們正確畢竟。我的解析代碼只是沒有認出它。

我使用的解析代碼

NSMutableArray* propertyList = [[NSMutableArray alloc] initWithContentsOfFile:path]; 
NSMutableDictionary* dict = [propertyFile objectAtIndex:0]; 
NSMutableArray* filters = [[[NSMutableArray alloc] initWithArray:[dict objectForKey:@"Filters"]] retain]; 

<array> 
    <dict> 
     <key>PageTitle</key> 
     <string>Title</string> 
     <key>Filters</key> 
     <array> 
      <dict> 
       <key>Filter</key> 
       <string>SomeFilter</string> 
       <key>Param</key> 
       <string>SomeParam</string> 
      </dict> 
     </array> 
    </dict> 
</array> 
+0

什麼「解析」代碼?爲什麼不使用'NSArray arrayWithContentsOfFile:'將plist加載到數組中? – rmaddy 2013-02-25 19:39:44

+0

我是,但它不認識它。 – Hub3rt 2013-02-25 19:49:50

+0

我是,但它不承認。見上面編輯 – Hub3rt 2013-02-25 19:50:19