Plist: what it is and how to use it
What exactly is a .plist file and how would I use it? When I view this in xcode, it seems to generate some kind of template vs showing me some xml code. Is there a way that I can extract the data in a plist file by pushing the contents int开发者_运维问答o an array? Also, where can I view the source of the .plist?
You can easily get the contents of a plist into an array by using the following code (we're opening here the file called 'file.plist' that's part of the Xcode project):
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];
contentArray = [NSArray arrayWithContentsOfFile:filePath];
A plist is just a XML file which corresponds to some DTD (datatype dictionary) designed by Apple, the DTD can be seen here:
http://www.apple.com/DTDs/PropertyList-1.0.dtd
The DTD -among other things- describes the "objects" and datatypes that the XML file can contain.
Plist is short for property list. It is just a filetype used by Apple to store data.
You can get more info here:
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man5/plist.5.html
If you want to read in plists check here:
// 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
could be whatever the top level container in the plist was. For example, if the plist was a dictionary then plist
would be an NSDictionary
. If the plist was an array it would be an NSArray
Here the format enum:
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
A little more on @AdamH's answer from Feb. 2021
propertyListFromData
has been deprecated bysince iOS 8.0 macOS 10.10dataWithPropertyList
Apple seems to be incorrect. It should be
propertyListWithData
instead ofdataWithPropertyList
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);
}}
E.g. to dump device's network configuration settings to stdout
dump_plist("/private/var/preferences/SystemConfiguration/preferences.plist");
精彩评论