在iOS中解析PLIST

4
我正在构建一个PLIST文件,它实际上是一个目录。我想解析这个plist文件,以便我可以在表格视图中显示姓氏,并在选择时填充下一个视图的标签,例如地址、电话号码和电子邮件。我需要一些指导,以下是我迄今为止创建的内容: Last Name First Name Address Phone Number Email Last Name First Name Address Phone Number Email Last Name First Name Address Phone Number Email 请问这个plist设置是否良好?如果设置得好,我只是对解析有点困惑。我以前用过GDATAXML处理播客,但不确定它如何与应用程序中的PLIST相关联。
4个回答

5
如果您想将一个plist文件加载到数组或字典中,只需使用以下方法:
NSArray * myArray = [NSArray arrayWithContentsOfFile: <plist-file-path>];

NSDictionary * myDictionary = [NSDictionary dictionaryWithContentsOfFile: <plist-file-path>];

在Xcode中创建plist文件,只需选择文件->新建,并从资源部分选择属性列表模板。然后您将被呈现属性列表编辑器,无需手动编码。


好的,这个布局是否可以被解析,或者plist中的每个数组都需要有唯一的名称? - user717452
是的,我按照你描述的方式使用Xcode制作了我发布的内容。 - user717452
我猜这对你有用 - 如果确实有效,请将其标记为正确! 谢谢!! - Ashley Mills

1

不要尝试从您的plist解析xml。

您必须将plist传递给NSDictionary

NSString *pathToPlist = [NSString stringWithFormat:@"%@/your_plist_file.plist",[[NSBundle mainBundle]resourcePath]];
NSDictionary *plistDictionary = [NSDictionary dictionaryWithContentsOfFile:pathToPlist];

//now you can access the keys and values:
for (NSString *key in plistDictionary) 
    NSLog(@"key = %@ and value = %@", key, [plistDictionary objectForKey:key]);

//or pass all values to an array:
NSArray *valArray = [plistDictionary allValues];

1
在 Swift 3 中:
if let path = Bundle.main.path(forResource: "FileName", ofType: "plist"), 
   let dict = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
    // use swift dictionary as normal
}

如果你的第一个节点是一个数组,你可以像这样使用数组(在这种情况下,数组包含字典元素):
if let path = Bundle.main.path(forResource: "FileName", ofType: "plist"),
   let array = NSArray(contentsOfFile: path) as? [Dictionary<String, Any>] {
    // use swift array as normal
}

-4

使用NSXMLParser文档在这里。

基本上,您将获得一个包含文件内容的NSDictionary。然后使用它进行处理。

[aDictionary objectForKey:@"foo"];

在SO上最糟糕的答案!为什么要使用NSXML解析器,当有一个内置方法可以做到这一点? - Ashley Mills
不,不是最糟糕的。内置方法并不总是最好的选择。想想NSStringWithContentsOfURL吧,它非常慢,而且不够灵活。NSXMLParser或一些第三方库比ContentsOfFile更快。 - wczekalski
你是错的。使用stringWithContentsOfFile:是由苹果进行了优化,以便与属性列表一起使用。 - Ashley Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接