2011-11-07 56 views
1

所以我搜索,並閱讀,併成功地做到了這一點,但遇到了這個問題。Plist數組到NSArray沒有對象

我有一個plist是一串字符串。我沒有讀入數組中的對象。我成功地爲另一個控制器中的字典執行此操作。所以這是我的代碼。

// Open plist and get brands 
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"brands" ofType:@"plist"]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
if ([fileManager fileExistsAtPath:plistPath]) { 
    NSLog(@"The file exists"); 
} else { 
    NSLog(@"The file does not exist"); 
} 

_brands = [NSArray arrayWithContentsOfFile:plistPath]; 

_catList = [[[NSMutableArray alloc] initWithCapacity:[_brands count]] autorelease]; 

這裏是我的plist。請注意,_brands數組被定義爲NSArray *品牌,屬性設置爲非原子,只讀,並被合成爲品牌= _brands。

<?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>Brand A</string> 
     <string>Brand B</string> 
     <string>Brand C</string> 
     <string>Brand D</string> 
    </array> 
</dict> 
</plist> 

我看到有一個標籤,但在Xcode中它顯示爲一個帶有字符串的數組。不是字典>數組>許多字符串

回答

7

PLists是他們心中的字典(注意<字典>標籤)。將文件讀入NSDictionary,然後使用objectforKey:方法和Root關鍵字向字典索取該數組。

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistPath]; 
_brands = [dict objectForKey:@"Root"]; 
+0

Thanks!我將繼續前進並將其設置爲字典,但我一直在尋找舊的教程和示例,將plist直接讀入數組中。這是允許在較舊的iOS版本? – Nungster

+0

我不知道它是否被允許。我一直把它們讀成字典。 –

+0

我遇到過很多像這樣的例子:http://iphonedevelopertips.com/data-file-management/reading-a-plist-into-an-nsarray.html – Nungster

3
NSString *plistPath = [self copyFileToDocumentDirectory:plistFileName]; 
NSDictionary *plistContents=[[NSDictionary alloc] initWithContentsOfFile:plistPath]; 

[plistPath release]; 
return plistContents;