2012-02-25 67 views
0

这是我的问题。我有一个名为myPlist plist中,它看起来是这样的:XCode:从plist读取数据到NSmutablearray

<?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中,这是我第一次有这种结构的,所以我觉得我做错了什么。顺便说一句,我提到我是一个noob? :)

请帮忙。

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

但我怎么能数据传送到一个NSMutableArray的,所以我可以在以后编辑数据:

编辑 感谢Rob,我可以用这条线现在读出的数据?或者我可以使用字典保存编辑的数据?

+0

你会得到正确的路径吗? NSLog路径对象。 – 2012-02-25 19:22:58

+0

'arrayWithContentsOfFile:'应该这样做。你确定你使用的路径是正确的吗?尝试使用NSLog将其打印出来,以便检查它。或者为路径声明一个单独的NSString ivar并设置一个断点,以便您可以直接在代码中查看它。 – Wienke 2012-02-25 19:28:34

+0

是的,路径是正确的。我检查了... – iPhoneNoob 2012-02-25 20:09:13

回答

1

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

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

顶级字典中不包含密钥Root。它包含三个密钥:1,23。所以你可以像这样得到一个对象:

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

其实,我得到了一个。当我复制/粘贴时,我错过了它... – iPhoneNoob 2012-02-25 20:10:04

+0

您的代码示例正确无误。我现在得到count = 3!我现在如何加载一个数组中的所有东西,以便我可以看到它的数量? – iPhoneNoob 2012-02-25 20:15:31

+1

遍历字典的元素并将其添加到“NSMutableArray”中。 – 2012-02-25 20:26:48