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