Como posso serializar um objeto para arquivo usando NSKeyedArchiver em formato NSPropertyListXMLFormat_v1_0?
-
05-09-2019 - |
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"
: -)
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"];
}