Как сериализовать объект в файл, используя NSKeyedArchiver в формате NSPropertyListXMLFormat_v1_0? - PullRequest
0 голосов
/ 07 апреля 2009

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

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

ограничено NSPropertyListBinaryFormat_v1_0.

Мне нужно, чтобы формат был удобочитаемым [так, xml]. Если вам интересно, это часть проекта, который я в конечном итоге выложу на github с сообщением в блоге о том, «Как тестировать GPS-приложения»

: -)

Ответы [ 3 ]

6 голосов
/ 07 апреля 2009

Вместо использования метода класса, попробуйте создать экземпляр NSKeyedArchiver и использовать setOutputFormat:NSPropertyListXMLFormat_v1_0 для указания формата XML. Единственным недостатком является то, что потребуется несколько дополнительных строк кода, поскольку для фактической обработки сериализации он не просто возвращает объект NSData за один шаг.

6 голосов
/ 07 апреля 2009

Вы должны использовать 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];
}
0 голосов
/ 20 февраля 2013

Вам придется кодировать класс объекта с помощью метода - (void) encodeWithCoder (NSCoder *) encoder {

[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];

}

...