Apple stellt NSArchiver und NSUnachriver für die Serialisierung/Deserialisierung von Objekten zur Verfügung, kann jedoch kein benutzerdefiniertes XML-Schema verarbeiten. Daher muss eine Objektstruktur manuell mit den Daten eines benutzerdefinierten XML-Schemas gefüllt werden. Da die iPhone-Entwicklergemeinde schnell wächst, sind viele Neuling-Programmierer verzweifelt, mit den verfügbaren XML-Parsing-Möglichkeiten umzugehen.Xml-Serialisierungsbibliothek für iPhone-Apps
Das iPhone SDK bietet nur NSXmlParser für XML-Parsing, was nützlicher ist, bestimmte Teile einer XML-Datei zu lesen, als eine ganze Objektstruktur zu füllen, was wirklich ein Schmerz ist. Die andere Möglichkeit ist die berühmte libxml-Bibliothek, die in ANSI C geschrieben ist - nicht einfach für jemanden zu benutzen, der mit objective-c programmiert und niemals richtiges C gelernt hat. Event gibt es viele Wrapper verfügbar, Umgang mit XML kann ein Schmerz für Anfänger sein.
Und hier findet meine Idee statt. Eine XmlSerializer-Bibliothek, die automatisch eine Objektstruktur ausfüllt, könnte es für viele Programmierer viel einfacher machen und die App-Qualität erhöhen. Meine Idee soll wie folgt funktionieren:
Die XML-Datei
<Test name="Michael" uid="28">
<Adress street="AlphaBetaGammastrasse 1" city="Zürich" postCode="8000" />
<Hobbies>
<Hobby describtion="blabla"/>
<Hobby describtion="blupblup"/>
</Hobbies>
</Test>
Die Klassen
@interface Test : NSObject {
NSString *name;
Adress *adress;
NSArray *hobbies;
int uid;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, retain) Adress *adress;
@property (nonatomic, retain) NSArray *hobbies;
@property (nonatomic, readwrite) int uid;
@end
@interface Adress : NSObject {
NSString *street;
NSString *city;
int postCode;
}
@property (nonatomic, copy) NSString *street;
@property (nonatomic, copy) NSString *city;
@property (nonatomic, readwrite) int postCode;
@end
wie der XML-Serializer funktionieren soll
NSError *error = nil;
XMLSerializer *serializer = [[XMLSerializer alloc] init];
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"TestFile" ofType:@"xml"]];
Test *test = [serializer deserializeWithData:data error:&error];
füllen
Um die Objektstruktur muss nur eine Zeile Code zu füllen:
Test *test = [serializer deserializeWithData:data error:&error];
Dies wäre so einfach zu bedienen, dass jeder Neuling Programmierer könnte es benutzen. Für eine erweiterte Nutzung könnte der Serializer konfigurierbar sein.
Was denken Sie, wäre dies eine hilfreiche und beliebte Bibliothek für iPhone und OSX-Anwendungen?
Bearbeiten: Sie können das Projekt here sehen, aber es ist fern von Release.
Hier ist etwas Ähnliches, das ich zusammen geklopft habe: http://kpmattius.wordpress.com/2011/06/07/objective-c-serialization/ Wenn jemand Zeit hat, können sie es mehr machen, aber es funktioniert für mich: D –
Dies hilft ... http://code.google.com/p/wonderxml/ – hrishib