【问题标题】:Reading from a plist从 plist 中读取
【发布时间】:2023-03-17 09:24:01
【问题描述】:

我正在尝试学习如何从 plist 中读取...我的例子很简单。我真的只想读一个整数,尽管对于更一般的数据情况,我也希望得到建议。 plist 有 Item0 - 数组,并且在 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>

【问题讨论】:

  • 原样......计数为零,日志中的数组为零。
  • 如果数组打印 nil,要么是 url 错误,要么是 plist 格式错误。在NSArray alloc 行之前的单独行(例如NSURL *url = [NSURL URLWithString...)中创建NSURL,并查看url 是否为nil。如果 url 没问题,请发布 plist xml。此外,NSArrays 包含对象,因此 count 赋值是错误的(int 是原始类型)。如果第一项是整数,它将是一个 NSNumber 对象,所以你需要做count = [(NSNumber *)[plistArray objectAtIndex:0] intValue];
  • ttp://www.apple.com/DTDs/PropertyList-1.0.dtd" rel="nofollow" target="_blank">apple.com/DTDs/PropertyList-1.0.dtd"> Item012
  • 网址打印得很好......所以就像你说的那样,它一定与我处理 plist 的方式有关。我把它贴在上面......它看起来有点乱,但它并不多。感谢您的帮助。

标签: objective-c nsarray plist


【解决方案1】:

plist有两个问题:

  • &lt;plist&gt; 标记前面的 ; 不应存在
  • 您试图在代码中读取的数组位于 plist 的字典中(该数组不是最外层元素)

首先,去掉分号。

接下来,要么更新 plist 以仅包含 &lt;array&gt; 元素,要么更新代码以首先读取 &lt;dict&gt;,然后从字典中获取 NSArray

NSDictionary *plistDict = [NSDictionary dictionaryWithContentsOfURL:url];

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多