XCode:从plist读取数据到NSmutablearray

时间:2012-02-25 19:08:06

标签: iphone ios xcode nsmutablearray plist

这是我的问题。我有一个名为myPlist的plist,它看起来像这样:

<?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,这是我第一个有这种结构的人,所以我觉得我做错了。顺便提一下,我提到我是菜鸟吗? :)

请帮忙。

修改 感谢Rob,我现在可以使用以下行读取数据:

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

但是如何将数据传输到NSMutableArray以便以后编辑数据呢?或者我可以使用字典保存编辑的数据吗?

1 个答案:

答案 0 :(得分:1)

您缺少顶级plist标记的结束标记。我认为这是一个复制/粘贴错误。

如果在末尾添加缺少的</plist>,那么这是一个有效的属性列表。它包含顶级字典,因此您必须将其加载到NSDictionary,而不是NSArray(或NSMutableArray)。

顶级词典不包含键Root。它包含三个键:123。所以你可以从中得到一个像这样的对象:

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