Ios4 无法从plist读取数据
我在从plist文件读取数据时遇到问题。提取字符串中的值的正确方法是什么?假设我有两个项目,我如何获得这两个项目?下面是plist上的图像 下面是plist的源代码。我在某个地方读到,Xcode 3和Xcode 4可能有所不同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
<?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
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文件有关。但是我听说这种方法可能有效,但它不是理想的方法。不要停止寻找正确的答案或方法。但我很高兴这种方法对您有所帮助:)