2011-04-10 91 views
6

我不確定我的問題到底是什麼,因爲我一直在使用此方法一段時間,並且從來沒有遇到過這個問題。Array無法從plist加載數據

基本上,正如標題所說。此代碼從位於「資源」組中的plist加載數據

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"]; 
myArray = [[NSArray alloc]initWithContentsOfFile:myFile]; 
NSLog(@"%@", myArray); 

它顯示(null)。有人知道爲什麼

我有相同的ViewController另一個設置和工作得很好。然而這個特殊的plist不加載。而且我甚至還刪除了plist,並從另一個創建了一個副本,以確保不是結構問題。

我這樣做是錯誤的嗎?我應該使用FileManager嗎?

UPDATE --------------------------------------------- ----------------------------

好吧,我簡直不敢相信我即將說的話。大聲笑

我正在使用XCode 4,您在Xcode中編輯plists的方式與Xcode 3.x不同。就像在早期的版本中,你可以選擇plists的根目標是你希望他們(數組,字典等)我的問題是我試圖加載到NSArray中的plist實際上是一個結構化的字典。但是我從來沒有在Xcode中看到過這種情況,除了使用TextEdit或其他文本編輯器瀏覽內容之外,我不知道如何看到這一點。

非常愚蠢的我必須說。有誰知道爲什麼XCode 4不會像XCode 3.x那樣顯示plist的根?

的XCode 3.X:

的XCode 4:http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png

回答

3

改爲使用字典。我用NSArrays和屬性列表有未定義的行爲。例如

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"]; 
NSMutableDictionary* myDict = [[NSMutableDictionary alloc]initWithContentsOfFile:myFile]; 
NSLog(@"%@", myDict); 
+0

這工作...雖然我不明白爲什麼。plist的結構與我用於其餘文件的結構完全相同。 :( – MrShoot 2011-04-10 15:18:12

+1

如果plist中的頂層對象是一個數組,則* *不能*使用'NSDictionary'或'NSMutableDictionary'來加載plist,反之亦然。這不是用戶首選項的問題。 ,OP的問題是底層plist中的頂層對象是一個字典而不是數組,如果是這樣的話,那麼@ManuelDiaz發佈了一個錯誤的plist文件示例 – jlehr 2011-04-10 15:28:47

+0

感謝您的澄清,我有這個未定義的行爲Xcode 4也是如此。直到@Manuel Diaz更新Xcode 4才隱藏了plist root。 – David 2011-04-10 17:07:59

0

你有什麼期待權。檢查文件是否在正確的目錄中,並且有內容。可能希望在登錄myLog時使用NSLog。

+0

是的,該文件是在正確的目錄。這裏是我的日誌http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png和內容http://dl.dropbox.com/u /919254/Screen%20shot%202011-04-10%20at%202.33.37%20AM.png – MrShoot 2011-04-10 06:36:11

+0

一切正常,只需檢查您發佈的plist文件的根目錄是一個字典(看起來像一個數組)。你在程序中使用了正確的名字。 – Jordan 2011-04-10 14:49:27

+0

這太奇怪了,不知何故,當我將plist加載到字典中時,它獲得的值沒有問題。然而,結構與我的其他plist完全相同,並且它們的加載方式與NSArrays相同! – MrShoot 2011-04-10 15:20:17

1

我也有類似的情況。解決:

  1. SELECT *的.plist樹
  2. 調用右鍵菜單
  3. 選擇 「打開外部編輯器」
  4. 根將是可見的 - 改變 「類」 到 「陣列」
  5. 保存