Como posso serializar um objeto para arquivo usando NSKeyedArchiver em formato NSPropertyListXMLFormat_v1_0?

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

Pergunta

Esperamos que esse título é suficiente clara. De qualquer forma, parece que:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

é restrito a NSPropertyListBinaryFormat_v1_0.

Eu preciso o formato a ser legível [assim xml]. Se você estiver interessado, isso é parte do projeto que vai finalmente colocar-se no github com um post sobre "Como Applications Teste Unidade GPS"

: -)

Foi útil?

Solução

Você tem que usar NSPropertyListSerialization para convertê-lo. Basicamente, assumindo o objeto que você está serialização é chamado myObject eo arquivo final é armazenado em myPath, você serializar-lo para XML usando algo parecido com o seguinte fragmento de código:

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];
}

Outras dicas

Em vez de usar o método de classe, tente criar uma instância de NSKeyedArchiver e usando setOutputFormat:NSPropertyListXMLFormat_v1_0 para especificar o formato XML. A única desvantagem é que vai demorar algumas linhas extras de código, uma vez que realmente lidar com a serialização, não só vai retornar um objeto NSData em uma única etapa.

Você terá que codificar a classe de objeto usando o método - (void) encodeWithCoder (NSCoder *) codificador {

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

}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top