将任意NSData写入NSXMLElement的最佳方法

时间:2012-04-16 14:30:26

标签: objective-c xml cocoa xml-serialization base64

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

我不想使用类别来推广我自己的解决方案,因为链接问题的已接受答案(链接到Matt Gallagher's solution)。

更新

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

1 个答案:

答案 0 :(得分: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;
}