gpt4 book ai didi

iOS:读取原始 plist

转载 作者:行者123 更新时间:2023-11-28 20:09:19 25 4
gpt4 key购买 nike

我想阅读 UserDefaults plist 但不是作为字典或数据。我希望它像用编辑器打开它时一样是字符串。

NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *homeDir = [documentsPath stringByReplacingOccurrencesOfString:@"Documents" withString:@""];
NSString *defaultsPath = [homeDir stringByAppendingString:[NSString stringWithFormat:@"Library/Preferences/%@.plist", [[NSBundle mainBundle] bundleIdentifier]]];
NSData *data = [NSData dataWithContentsOfFile:defaultsPath];

已经尝试过:

`NSString *contents = [NSString stringWithContentsOfFile:defaultsPath encoding:NSUTF8StringEncoding error:&error];

结尾

The operation couldn’t be completed. (Cocoa error 261.)

最佳答案

属性列表格式可以是二进制或文本。二进制 plist 不能加载到 NSString 中,因为字符串用于文本,而不是任意二进制数据。您收到的错误似乎表明该文件无法解释为 UTF-8,这意味着它是使用另一种编码进行编码的,或者根本不是文本。

如果确定属性列表是文本属性列表,可以使用:

NSStringEncoding enc;
NSString *contents = [NSString stringWithContentsOfFile:defaultsPath usedEncoding:&enc error:&error];

这将允许框架为您确定文本 plist 的编码。如果它不是文本 plist,您可以使用 plutil 命令行实用程序将其转换为文本 plist:

plutil -convert xml1 file.plist

或者,您也可以通过使用 NSPropertyListSerialization 加载 plist 在代码中执行此操作类,从中获取将 plist 表示为 XML 格式的 NSData,然后然后将其转换为字符串。

一个例子是[未编译和未测试]:

// load the file as-is into a data object
NSData *data = [NSData dataWithContentsOfFile:defaultsPath];

// convert the plist data into actual property list structure
id plistFile = [NSPropertyListSerialization propertyListWithData:data
options:0
format:NULL
error:&error];

// get the XML representation of the property list
NSData *asXML = [NSPropertyListSerialization dataWithPropertyList:plistFile
format:NSPropertyListXMLFormat_v1_0
options:0
error:&error];

// convert the NSData object into an NSString object
NSString *asString = [[NSString alloc] initWithData:asXML encoding:NSUTF8StringEncoding];

无论原始 plist 是 XML 还是二进制格式,这都应该有效。在此示例中,我假设属性列表的 XML 表示实际上是 UTF-8 编码的,因为这是 XML 数据最常见的编码。

关于iOS:读取原始 plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com