不能从plist读取数据

时间:2011-08-24 10:54:06

标签: ios4 plist

我在从plist文件中读取数据时遇到问题。提取字符串中值的正确方法是什么?并且假设我有2个项目,我如何获得两个项目?下面是plist上的图像。 EventAddress.plist

以下是plist的源代码。我在某处读到Xcode 3和Xcode 4可能存在差异。

<?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>Array</key>
    <array>
        <string>value 1</string>
        <string>value 2</string>
    </array>
</dict>
</plist>

2 个答案:

答案 0 :(得分:3)

首先,您需要在应用程序包中获取plist文件资源的路径:

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"filename" 
                                                      ofType:@"plist"];

根据此路径,您可以将plist文件加载到内存中。这很简单,因为plist文件的根节点是一个数组:

NSArray* plist = [NSArray arrayWithContentsOfFile:plistPath];

plist中的根节点通常是字典,字典具有加载plist的等效方法。如果根节点未知,那么你应该起诉NSPropertyListSerialization类,更多的工作,但更灵活。

plist内存中的内容将始终是属性值类的实例,就像使用它们的任何实例一样使用它们:

  • NSData
  • NSString
  • NSArray
  • NSDictionary
  • NSDate
  • NSNumber

答案 1 :(得分:1)

还是对此做出回复。但我设法找到了一个让它适合我的代码。代码如下。感谢peylow为您的努力。

    NSString *path = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"]; 
    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

    NSArray* allmyKeys = [myDictionary  allValues];
    NSLog(@"%@", allmyKeys);
    NSLog(@"%@", [[allmyKeys objectAtIndex:0] objectAtIndex:0]);

最后2个NSLog用于查看我的plist是否返回值数组并查找其中只有1个值。并且非常感谢调试器,在看了好几天之后,我也意识到了我的问题。该死的阵列不是正常的一维,它的二维。这就是为什么我两次使用objectAtIndex。