Objekt-Serialisierung im XML-format unter Verwendung von Obj-C / iPhone SDK
Habe ich eine iPhone-App, verwendet eine relativ kleine Menge von Daten.
Ich möchte zum speichern der Daten im XML-format und können zum laden in den Arbeitsspeicher, um Objective-C-Objekte. Ich würde gerne mit dem iPhone SDK Einrichtungen wie NSPropertyListSerialization oder writeToFile:atomar: Klassen und Methoden.
Den NSPropertyListSerialization Dokumentation sagt, dass
Den NSPropertyListSerialization Klasse
stellt Methoden zum konvertieren von Eigentum
Liste von Objekten in und aus mehreren
serialisierte Formate. Eigenschaft Liste
Objekte gehören NSData, NSString,
NSArray, NSDictionary, NSDate, und
NSNumber-Objekte.
Angenommen, ich möchte sparen ein paar Person Objekte (eine Familie), deren Attribute sind alle Eigenschaft-Liste-Arten. Die einzige-Art und Weise habe ich es geschafft, speichern Sie diese im XML-Format ist dabei:
//container for person objects
NSMutableArray *family = [[NSMutableArray alloc] init];
for (int i = 0; i < numberOfPeople; i++) {
//simulate person's attributes
NSArray *keys = [[NSArray alloc] initWithObjects:
@"id",
@"name",
@"age",
Nil];
NSArray *values = [[NSArray alloc] initWithObjects:
[NSNumber numberWithInt:i],
@"Edward",
[NSNumber numberWithInt:10],
Nil];
//create a Person (a dictionary)
NSDictionary *person = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
[family addObject:person];
[person release];
}
//save the "person" object to the property list
[family writeToFile:@"<path>/family.plist" atomically:YES];
[family release];
dem erzeugen würde, die Familie.plist Datei.
Beachten Sie allerdings, dass mein Person - Objekt ist eigentlich ein NSDictionary-Objekt (die ich glaube nicht, dass Unterklassen eine gute Idee wäre) mit Attributen als Schlüssel.
Gibt es eine Möglichkeit zu schaffen, eine Objective-C-Klasse wie folgt aus:
@interface Person : NSObject {
NSString *_id;
NSString *_name;
NSNumber *_age;
}
@end
und zu serialisieren, um eine plist-oder XML-Datei? (Ich brauche das Objekt zu speichern in text-format (nicht Binär) aus, so dass ich Bearbeiten kann, diese Daten in einem text-editor und ermöglichen, meine Anwendung zu laden diese zur Laufzeit, die Umstellung auf Objective-C Objekte normalerweise).
Vielen Dank im Voraus,
Eduardo
InformationsquelleAutor Eduardo Coelho | 2010-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht schon gelesen, würde ich empfehlen die Archive und Serialisierungen Programming Guide, besonders die Teile über Codierung und Decodierung von Objekten mit dem NSCoding Protokoll.
Wenn Sie verwenden, dieses Protokoll, Ihre Objekte gespeichert werden, als NSData. Aber Sie könnte zu imitieren (d.h. erstellen Sie Ihre eigenen Protokoll), so dass Ihre Klassen zurückkehren Wörterbuch Darstellungen von sich selbst, und initialisieren kann selbst aus einem Wörterbuch Vertretung (ich glaube nicht, dass es einen Weg gibt, um automatisch tun). Aber das Ergebnis würde im wesentlichen die gleiche wie die Familie.plist-Datei, die Sie geschrieben.
Wenn Sie auf der Suche nach einem Weg, um eine XML-Datei wie folgt:
dann plist nicht, was Sie wollen.
Ich beschlossen, nicht zu verwenden .plist mehr und verwenden von XML-Dateien + einige DOM-Parser statt. Es gibt ein nettes tutorial auf raywenderlich.com/725/.... Erkannte ich die plist-syntax ist nicht die am besten geeignete für meine Bedürfnisse, aber ich hatte erwartet, das iPhone SDK, um mir zu helfen, um die Serialisierung von meinem Objective-C-Objekte (im XML-Modus) in einer einfachen Art und Weise, was nicht der Fall ist.
InformationsquelleAutor Brian
Ich schäme mich zu sagen, dass ich
[NSString stringWithformat:]
um XML-Dokumente. Es ist der einfachste Weg, die ich gefunden habe bisher.InformationsquelleAutor sylvanaar