2014-03-28 186 views
0

遇到了一些問題。我有一個.plist文件,其中包含下一個數據http://imageshack.com/a/img856/1421/xvzm.png從.plist文件中讀取

所以我不明白,我如何需要讀取第一個數組,比在數組讀取字典。或者,也許需要重寫文件,並更改根鍵來輸入字典,讀這樣的:

NSString *errorDesc = nil; 
NSPropertyListFormat format; 
NSString *plistPath; 
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
    NSUserDomainMask, YES) objectAtIndex:0]; 
plistPath = [rootPath stringByAppendingPathComponent:@"Data.plist"]; 
if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) { 
    plistPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
} 
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; 
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization 
    propertyListFromData:plistXML 
    mutabilityOption:NSPropertyListMutableContainersAndLeaves 
    format:&format 
    errorDescription:&errorDesc]; 
if (!temp) { 
    NSLog(@"Error reading plist: %@, format: %d", errorDesc, format); 
} 
self.personName = [temp objectForKey:@"Name"]; 
self.phoneNumbers = [NSMutableArray arrayWithArray:[temp objectForKey:@"Phones"]]; 

回答

1

您可以通過下面的代碼做到這一點:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
NSArray *dataArray = [NSArray arrayWithContentsOfFile:plistPath]; 

此數組將包含所有的字典,你可以讓他們喜歡:

NSDictionary *dict = [dataArray objectAtIndex:0]; 
+1

除本扔出來的代碼加載從Documents文件夾(如果存在)。 – rmaddy

+1

它實際上並沒有回答這個問題。問題是關於從數組中獲取所需的數據。 – rmaddy

+0

'objectAtIndex:'是一箇舊的語法,有一些更新的 –

1
SString *plistFile = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
NSArray *array = [NSArray arrayWithContentsOfFile:plistFile]; 

for(NSDictionary *dictionary in array) { 
    NSLog(@"%@", dictionary); 
} 

NSDictionary *item0 = array[0]; 
NSString *imageName = item[0][@"name"]; 
+1

這拋出了代碼從文檔中加載文件文件夾,如果它存在。 OP可能仍然需要該代碼。 – rmaddy

+0

OP的代碼先查看Documents文件夾,然後使用資源束作爲後備。爲了OP,我指出這個答案消除了這個邏輯。 – rmaddy