Ios4 无法从plist读取数据

Ios4 无法从plist读取数据,ios4,plist,Ios4,Plist,我在从plist文件读取数据时遇到问题。提取字符串中的值的正确方法是什么?假设我有两个项目,我如何获得这两个项目?下面是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/Property

我在从plist文件读取数据时遇到问题。提取字符串中的值的正确方法是什么?假设我有两个项目,我如何获得这两个项目?下面是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>

排列
值1
价值2

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

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"filename" 
                                                      ofType:@"plist"];
给定此路径,可以将plist文件加载到内存中。这非常简单,因为plist文件的根节点是一个数组:

NSArray* plist = [NSArray arrayWithContentsOfFile:plistPath];
plist中的根节点通常是一个dictionary,dictionary具有加载plist的等效便利方法。如果根节点未知,则应使用
NSPropertyListSerialization
类,这需要更多的工作,但更灵活

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

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

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

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"filename" 
                                                      ofType:@"plist"];
给定此路径,可以将plist文件加载到内存中。这非常简单,因为plist文件的根节点是一个数组:

NSArray* plist = [NSArray arrayWithContentsOfFile:plistPath];
plist中的根节点通常是一个dictionary,dictionary具有加载plist的等效便利方法。如果根节点未知,则应使用
NSPropertyListSerialization
类,这需要更多的工作,但更灵活

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

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

一定要回答这个问题。但我设法找到了一个代码,它已经为我工作了。代码如下。谢谢你的努力

    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个值。非常感谢调试器,在连续3天查看它之后,我也意识到了我的问题。这个该死的数组不是普通的一维,而是二维。这就是为什么我两次使用objectAtIndex

还是要回答这个问题。但我设法找到了一个代码,它已经为我工作了。代码如下。谢谢你的努力

    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个值。非常感谢调试器,在连续3天查看它之后,我也意识到了我的问题。这个该死的数组不是普通的一维,而是二维。这就是为什么我两次使用objectAtIndex

好的,谢谢你的回复。因此,如果我想要值“value 1”,我需要执行
NSString*v1=[plist objectAtIndex:0]?当我执行nsarray*plist时,我在运行调试器时得到一个未初始化的数组0x0。。。我如何克服这个问题?@Melvin Lay-如果你得到
nil
(0x0),那意味着你无法打开plist。您是否确保使用了正确的文件名,并将其复制到应用程序包中?iOS上的文件名区分大小写。文件名是EventAddress.plist,因此我的
pathForResource:@“EventAddress”
对吗?@Melvin Lai-应该是正确的,路径是否设置为非
nil
?好的,谢谢您的回复。因此,如果我想要值“value 1”,我需要执行
NSString*v1=[plist objectAtIndex:0]?当我执行nsarray*plist时,我在运行调试器时得到一个未初始化的数组0x0。。。我如何克服这个问题?@Melvin Lay-如果你得到
nil
(0x0),那意味着你无法打开plist。您是否确保使用了正确的文件名,并将其复制到应用程序包中?iOS上的文件名区分大小写。文件名是EventAddress.plist,所以我的
pathForResource:@“EventAddress”
对吗?@Melvin Lai-应该是正确的,路径是否设置为非
nil
?非常感谢发布此消息!!!我被这件事弄得头破血流。我确信这与在xcode 4.0中创建的plist文件有关。但是我听说这种方法可能有效,但它不是理想的方法。不要停止寻找正确的答案或方法。但我很高兴这个方法帮助了你:)非常感谢你发布这个!!!我被这件事弄得头破血流。我确信这与在xcode 4.0中创建的plist文件有关。但是我听说这种方法可能有效,但它不是理想的方法。不要停止寻找正确的答案或方法。但我很高兴这种方法对您有所帮助:)