Plist:它是啥以及如何使用它

Posted

技术标签:

【中文标题】Plist:它是啥以及如何使用它【英文标题】:Plist: what it is and how to use itPlist:它是什么以及如何使用它 【发布时间】:2011-04-13 19:25:21 【问题描述】:

.plist 文件到底是什么,我将如何使用它?当我在 xcode 中查看它时,它似乎生成了某种模板,而不是向我展示了一些 xml 代码。有没有一种方法可以通过将内容推送到数组中来提取 plist 文件中的数据?另外,在哪里可以查看 .plist 的来源?

【问题讨论】:

【参考方案1】:

您可以使用以下代码轻松地将 plist 的内容放入数组中(我们在此处打开名为“file.plist”的文件,它是 Xcode 项目的一部分):

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];
contentArray = [NSArray arrayWithContentsOfFile:filePath];

plist 只是一个 XML 文件,它对应于 Apple 设计的一些 DTD(数据类型字典),DTD 可以在这里看到:

http://www.apple.com/DTDs/PropertyList-1.0.dtd

DTD(除其他外)描述了 XML 文件可以包含的“对象”和数据类型。

【讨论】:

【参考方案2】:

Plist 是属性列表的缩写。它只是 Apple 用来存储数据的一种文件类型。

您可以在此处获取更多信息:

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man5/plist.5.html

如果您想在 plist 中阅读,请点击此处:

// Get the location of the plist
// NSBundle represents the main application bundle (.app) so this is a shortcut
// to avoid hardcoding paths
// "Data" is the name of the plist
NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];

// NSData is just a buffer with the binary data
NSData *plistData = [NSData dataWithContentsOfFile:path];

// Error object that will be populated if there was a parsing error
NSString *error;

// Property list format (see below)
NSPropertyListFormat format;

id plist;

plist = [NSPropertyListSerialization propertyListFromData:plistData
                                mutabilityOption:NSPropertyListImmutable
                                format:&format
                                errorDescription:&error];

plist 可以是 plist 中的***容器。例如,如果 plist 是字典,那么 plist 将是 NSDictionary。如果 plist 是一个数组,它将是一个 NSArray

这里是枚举格式:

enum 
   NSPropertyListOpenStepFormat = kCFPropertyListOpenStepFormat,
   NSPropertyListXMLFormat_v1_0 = kCFPropertyListXMLFormat_v1_0,
   NSPropertyListBinaryFormat_v1_0 = kCFPropertyListBinaryFormat_v1_0
; NSPropertyListFormat;

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html.html

【讨论】:

感谢您的代码。你能逐行告诉我你在这里做什么吗?另外我不确定其中一些数据类型是什么(NSBundle、NSData、NSPropertyListFormat、NSPropertyListSerialization)。 @locoboy 搜索 Apple Developer Documentation - NSBundle NSData NSPropertyListFormat NSPropertyListSerialization【参考方案3】:

更多关于 @AdamH's answer 的信息,从 2021 年 2 月开始

    propertyListFromData has been deprecated by dataWithPropertyListios 8.0 macOS 10.10 起

    Apple 似乎是不正确的。它应该是 propertyListWithData 而不是 dataWithPropertyList

void dump_plist(const char *const path)@autoreleasepool
  NSError *err=nil;
  puts([[NSString stringWithFormat:@"%@",[NSPropertyListSerialization
    propertyListWithData:[NSData dataWithContentsOfFile:[[NSString new]initWithUTF8String:path]]
    options:NSPropertyListMutableContainersAndLeaves
    format:nil
    error:&err
  ]]UTF8String]);
  assert(!err);

例如将设备的网络配置设置转储到标准输出

dump_plist("/private/var/preferences/SystemConfiguration/preferences.plist");

【讨论】:

以上是关于Plist:它是啥以及如何使用它的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 应用程序密钥 - 它是啥以及它是如何工作的?

setSoTimeout 的功能是啥以及它是如何工作的?

SignInManager,它是啥以及如何使用,何时使用?

TensorBoard 中的 hp_metric 是啥以及如何摆脱它?

MurmurHash - 它是啥?

“列表理解”和类似的意思是啥?它是如何工作的,我该如何使用它?