Apple fornisce NSArchiver e NSUnachriver per la serializzazione/deserializzazione degli oggetti, ma questo non può gestire alcun schema xml personalizzato. Quindi compilare una struttura ad oggetti con i dati di qualsiasi schema xml personalizzato deve essere fatto manualmente. Dato che la comunità degli sviluppatori di iPhone sta crescendo rapidamente, molti programmatori principianti sono disperati per affrontare le possibilità di analisi dei xml disponibili.Libreria di serializzazione Xml per applicazioni iPhone
iPhone SDK fornisce solo NSXmlParser per l'analisi xml, che è più utile per leggere determinate parti di un file xml, piuttosto che riempire un'intera struttura di oggetti, il che è davvero un dolore.
L'altra possibilità è la famosa libreria libxml, che è scritta in ANSI C - non è facile da usare per qualcuno che inizia a programmare con C obiettivo-c e mai appreso prima. Evento ci sono molti wrapper disponibili, trattare con xml può essere un problema per i principianti.
E qui la mia idea ha luogo. Una libreria XmlSerializer che riempie automaticamente una struttura di oggetti potrebbe renderla molto più semplice e aumentare la qualità delle app per molti programmatori. mia idea dovrebbe funzionare in questo modo:
il file XML
<Test name="Michael" uid="28">
<Adress street="AlphaBetaGammastrasse 1" city="Zürich" postCode="8000" />
<Hobbies>
<Hobby describtion="blabla"/>
<Hobby describtion="blupblup"/>
</Hobbies>
</Test>
Le classi per riempire
@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
Come il serializzatore XML dovrebbe funzionare
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];
Per riempire la struttura dell'oggetto ha bisogno solo di una riga di codice:
Test *test = [serializer deserializeWithData:data error:&error];
Questo sarebbe così facile da usare che qualsiasi programmatore principiante potrebbe usarlo. Per un uso più avanzato, il serializzatore potrebbe essere configurabile.
Cosa ne pensi, sarebbe una libreria utile e popolare per iPhone e applicazioni OSX?
Modifica: È possibile vedere il progetto here, ma è lontano dal rilascio.
Ecco qualcosa di simile che ho messo insieme: http://kpmattius.wordpress.com/2011/06/07/objective-c-serialization/ Se qualcuno ha tempo può farlo farlo di più ma funziona per me: D –
Questo aiuterà ... http://code.google.com/p/wonderxml/ – hrishib