Wie serialisieren ich ein Objekt mit NSKeyedArchiver in NSPropertyListXMLFormat_v1_0 Format einzureichen?
-
05-09-2019 - |
Frage
Hoffentlich Titel ist deutlich genug. Wie auch immer, es scheint:
[NSKeyedArchiver archiveRootObject:rootObject toFile:path];
ist beschränkt auf NSPropertyListBinaryFormat_v1_0
.
ich brauche das Format lesbar Mensch zu sein [so xml]. Wenn Sie interessiert sind, dann ist dies das Projektes Teil schließlich auf Github mit einer Blog-Post setzen werde ich über „How to Unit Test GPS-Anwendungen“
: -)
Lösung
Sie haben NSPropertyListSerialization
zu verwenden, um es zu konvertieren. Im Grunde genommen das Objekt unter der Annahme, dass Sie die Serialisierung myObject
genannt wird und die ultimative Datei wird in myPath
gespeichert sind, würden Sie es in XML serialisiert so etwas wie das folgende Codefragment verwenden:
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];
}
Andere Tipps
Statt die Klassenmethode zu verwenden, versuchen, eine Instanz von NSKeyedArchiver Erstellen und Verwenden von setOutputFormat:NSPropertyListXMLFormat_v1_0
XML-Format angeben. Der einzige Nachteil ist es, ein paar zusätzliche Zeilen Code übernehmen würde, da tatsächlich die Serialisierung handhabt, wird es nicht nur ein NSData Objekt in einem Schritt zurück.
In Kürze erhalten Sie haben die Objektklasse zu codieren, durch Verfahren unter Verwendung von - (void) encodeWithCoder (NSCoder *) Encoder {
[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];
}