Лучший способ записать произвольные NSData в NSXMLElement
Я разрешаю экспортировать данные приложения (это приложение Mac на 10.7) в виде файла XML, и одно поле, которое я хотел бы иметь возможность экспортировать / импортировать в / из XML, - это NSData
поле. Каков будет правильный / принятый способ сделать это? Должен ли я преобразовать в base64 и записать эту строку в XML?
Я бы предпочел не выдвигать свое собственное решение, используя категорию, как это делает принятый ответ на связанный вопрос (ссылка на решение Мэтта Галлахера).
Обновить
Я только что обнаружил NSPropertyListSerialization
учебный класс. Я возродил свои надежды, но он имеет только статические методы сериализации, которые возвращают NSData
представления.
1 ответ
Я понял (как упоминалось в моем обновленном), что могу использовать класс 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;
}