2012-02-25 97 views
0

這是我的問題。我有一個名爲myPlist plist中,它看起來是這樣的:XCode:從plist讀取數據到NSmutablearray

<?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">  
<dict>  
<key>1</key>  
<array>  
<string>Dog</string>  
<string> empty </string>  
<true/>  
</array>  
<key>2</key>  
<array>  
<string>Car</string>  
<string> empty </string>  
<false/>  
</array>  
<key>3</key>  
<array>  
<string>Table</string>  
<string> empty </string>  
<true/>  
</array> 
</dict>  

它爲每個鍵三個值。兩個是字符串,一個是布爾值。我嘗試了'常用的方法'用plist填充nsmutablearray,所以我可以在tableview中顯示它,但NSMutableArray總是空的。我試過這第一個:

NSMutableArray *mutable = [[NSArray arrayWithContentsOfFile: 
      [[NSBundle mainBundle] pathForResource:@"myPlist" ofType:@"plist"]] retain]; 

然後我也試過這個,但它仍然返回0對象。

NSString *path = [[NSBundle mainBundle] pathForResource:@"myPlist" ofType:@"plist"]; 

     NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

     NSArray *mutable = [NSArray arrayWithArray:[dict objectForKey:@"Root"]]; 

我總是用字典的plist中,這是我第一次有這種結構的,所以我覺得我做錯了什麼。順便說一句,我提到我是一個noob? :)

請幫忙。

NSDictionary *dogObject = [dict objectForKey:@"1"]; 

但我怎麼能數據傳送到一個NSMutableArray的,所以我可以在以後編輯數據:

編輯 感謝Rob,我可以用這條線現在讀出的數據?或者我可以使用字典保存編輯的數據?

+0

你會得到正確的路徑嗎? NSLog路徑對象。 – 2012-02-25 19:22:58

+0

'arrayWithContentsOfFile:'應該這樣做。你確定你使用的路徑是正確的嗎?嘗試使用NSLog將其打印出來,以便檢查它。或者爲路徑聲明一個單獨的NSString ivar並設置一個斷點,以便您可以直接在代碼中查看它。 – Wienke 2012-02-25 19:28:34

+0

是的,路徑是正確的。我檢查了... – iPhoneNoob 2012-02-25 20:09:13

回答

1

您缺少頂級plist標記的結束標記。我認爲這是一個複製/粘貼錯誤。

如果在最後添加缺少的</plist>,那是一個有效的屬性列表。它包含一個頂級字典,因此您必須將其加載到NSDictionary,而不是NSArray(或NSMutableArray)。

頂級字典中不包含密鑰Root。它包含三個密鑰:1,23。所以你可以像這樣得到一個對象:

NSDictionary *dogObject = [dict objectForKey:@"1"]; 
+0

其實,我得到了一個。當我複製/粘貼時,我錯過了它... – iPhoneNoob 2012-02-25 20:10:04

+0

您的代碼示例正確無誤。我現在得到count = 3!我現在如何加載一個數組中的所有東西,以便我可以看到它的數量? – iPhoneNoob 2012-02-25 20:15:31

+1

遍歷字典的元素並將其添加到「NSMutableArray」中。 – 2012-02-25 20:26:48