从plist读

时间:2011-11-12 02:12:12

标签: objective-c nsarray plist

我正在努力学习如何从一个plist中读取...我的是一个简单的案例。我真的只想读一个整数,虽然对于更一般的数据情况我也很感激。 plist具有Item0 - Array,并且在该Item 0下有一个数字。这就是我试图读这个的方式。

plistArray = [[NSArray alloc] initWithContentsOfURL:[NSURL      URLWithString:@"http://www.website.com/count.plist"]];


//count = [[plistArray objectAtIndex:0]];
count=(int)[plistArray objectAtIndex:0];
NSLog(@"array %@\n",plistArray);

NSLog(@"count %i\n",count);

这是plist xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "apple.com/DTDs/PropertyList-1.0.dtd">
;<plist version="1.0"> 
    <dict> 
        <key>Item0</key> 
        <array> 
            <integer>12</integer> 
        </array> 
    </dict> 
</plist>

3 个答案:

答案 0 :(得分:1)

你的plist有一个字典作为根对象,而不是一个数组。您应该使用URL的内容创建一个NSDictionary,然后它将包含一个数组(对于键Item0),这个数组的第一个对象将是您持有整数的NSNumber。

答案 1 :(得分:1)

我不确定你是如何创建plist的,但我认为你正在保存NSDictionary而不是NSArray。

plist中数据的结构显示根对象是字典(dict),其中包含一个键/值对。关键是“Item0”,值是我认为你正在寻找的NSArray。

试试这个:

plistDict = [[NSDictionary alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.website.com/count.plist"]];
NSArray * plistArray = [plistDict objectForKey:@"Item0"];
NSLog(@"array %@", plistArray);

答案 2 :(得分:1)

plist有两个问题:

  • ;标记前面的<plist>不应该在那里
  • 您尝试在代码中读取的数组位于plist中的字典内(数组不是最外层的元素)

首先,删除分号。

接下来,更新plist以仅包含<array>元素或更新代码以首先阅读<dict>,然后从字典中取出NSArray

NSDictionary *plistDict = [NSDictionary dictionaryWithContentsOfURL:url];

NSArray *plistArray = [plistDict objectForKey:@"Item0"];

int count = [(NSNumber *)[plistArray objectAtIndex:0] intValue];