2012-06-03 81 views
2

我試圖讀取plist文件到使用initWithContentsOfFileNSArray描述hereNSArray的initWithContentsOfFile返回nil

我的代碼看起來像這樣

NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *plistPath = [bundle pathForResource: 
          @"routes" ofType:@"plist" ]; 
    routes = [[NSArray alloc] initWithContentsOfFile:plistPath ]; 
    NSLog:(@"contents of myArray %@", routes); 

routes.plist有數組和字符串2的完美結構簡單

<?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>Root</key> 
    <array> 
     <string>1</string> 
     <string>2</string> 
    </array> 
</dict> 
</plist> 

This is how it looks in xcode

一切似乎都很好。 plistPath使用正確的值進行初始化,這意味着文件被複制到捆綁包並可以被使用。但routes = [[NSArray alloc] initWithContentsOfFile:plistPath ];返回0x0值。我認爲這相當於nil

我的代碼有什麼問題?

回答

8

其實你的plist是一本字典。

更改此:

<dict> 
    <key>Root</key> 
    <array> 
     <string>1</string> 
     <string>2</string> 
    </array> 
</dict> 

這樣:

<array> 
    <string>1</string> 
    <string>2</string> 
</array> 
+1

男人,你是對的。但在Xcode可視化編輯器中,我選擇了數組類型!查看我添加的屏幕截圖。這是一個Xcode4錯誤? –

+0

沒有。你有一個名爲「Root」的鍵(這表明你的plist是一個「NSDictionary」)的數組對象。您可以使用不同的鍵名稱在該級別添加其他對象。 –

+1

但是沒有選擇,Xcode默認創建字典,並且不能在可視化編輯器中更改它。只有通過編輯plist作爲源文件。但好的,現在我知道了。謝謝! –

2

我想你想要做這樣的事情:

NSBundle *bundle = [NSBundle mainBundle]; 
NSString *plistPath = [bundle pathForResource: 
         @"routes" ofType:@"plist"]; 

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:plistPath]; 
NSArray *routes = [dictionary objectForKey:@"Root"];