Как сериализовать объект в файл с помощью NSKeyedArchiver в формате NSPropertyListXMLFormat_v1_0?

StackOverflow https://stackoverflow.com/questions/726053

Вопрос

Надеюсь, это название достаточно ясно.В любом случае, кажется:

[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"];

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top