Как сериализовать объект в файл с помощью NSKeyedArchiver в формате NSPropertyListXMLFormat_v1_0?
-
05-09-2019 - |
Вопрос
Надеюсь, это название достаточно ясно.В любом случае, кажется:
[NSKeyedArchiver archiveRootObject:rootObject toFile:path];
ограничивается NSPropertyListBinaryFormat_v1_0
.
Мне нужно, чтобы формат был удобочитаемым человеком [например, xml].Если вам интересно, это часть проекта, который я в конечном итоге выложу на github с сообщением в блоге «Как проводить модульное тестирование GPS-приложений».
:-)
Решение
Вы должны использовать NSPropertyListSerialization
чтобы преобразовать его.По сути, предполагая, что объект, который вы сериализуете, называется myObject
и окончательный файл сохраняется в myPath
, вы бы сериализовали его в XML, используя что-то вроде следующего фрагмента кода:
NSString *error = nil;
NSData *mySerializedObject = [NSKeyedArchiver archivedDataWithRootObject:myObject];
NSData *xmlData = [NSPropertyListSerialization dataFromPropertyList:mySerializedObject
format:NSPropertyListXMLFormat_v1_0
errorDescription:&error]:
if( xmlData ) {
[xmlData writeToFile:myPath atomically:YES];
} else {
NSLog(error);
[error release];
}
Другие советы
Вместо использования метода класса попробуйте создать экземпляр NSKeyedArchiver и использовать setOutputFormat:NSPropertyListXMLFormat_v1_0
указать формат XML.Единственным недостатком является то, что потребуется несколько дополнительных строк кода, поскольку для фактической обработки сериализации он не будет просто возвращать объект NSData за один шаг.
Вам нужно будет закодировать класс объекта с помощью метода -(void) encodeWithCoder(NSCoder *) encoder {
[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];
}