0

我允许将应用程序数据(它是 10.7 上的 Mac 应用程序)导出为 XML 文件,并且我希望能够从 XML 导出/导入/从 XML 导出/导入的一个字段是一个NSData字段。这样做的正确/可接受的方式是什么?我应该转换为 base64并将该字符串写入 XML 吗?

我不希望使用一个类别来推出我自己的解决方案,就像链接问题的公认答案一样(链接到Matt Gallagher 的解决方案)。

更新

我刚刚发现了这NSPropertyListSerialization门课。我抱有希望,但它只有返回NSData表示的静态序列化方法。

4

1 回答 1

0

我意识到(正如我的更新所暗示的那样)我可以使用NSPropertyListSerialization类,因为NSData返回的-dataWithPropertyList:format:options:error:只是一个 UTF-8 字符串。这是我用来序列化的:

NSData *data = value;

NSError *error = nil;
NSData *plistData = [NSPropertyListSerialization dataWithPropertyList:data
                                                               format:NSPropertyListXMLFormat_v1_0
                                                              options:0
                                                                error:&error];
if (error) {
    NSLog(@"Error serializing data to plist XML: %@", error);
} else {
    NSString *plistString = [[NSString alloc] initWithData:plistData encoding:NSUTF8StringEncoding];
    NSXMLElement *dataElement = [NSXMLElement elementWithName:field
                                                  stringValue:plistString];
}

并反序列化:

NSData *plistData = [element.stringValue dataUsingEncoding:NSUTF8StringEncoding];
NSData *originalData = [NSPropertyListSerialization propertyListWithData:plistData
                                                                 options:NSPropertyListImmutable
                                                                  format:NULL
                                                                   error:&error];

if (error) {
    NSLog(@"Error deserializing data from plist XML: %@", error);
} else {
    value = originalData;
}
于 2012-04-17T14:42:59.340 回答