J'ai une application pour iPhone qui utilise une quantité relativement faible de données. Je voudrais enregistrer les données au format XML et pouvoir les charger en mémoire dans des objets Objective-C. Je voudrais utiliser les installations du SDK iPhone comme NSPropertyListSerialization ou writeToFile: atomically: classes et méthodes.Sérialisation d'objet au format XML avec Obj-C/iPhone SDK
Le NSPropertyListSerialization documentation dit que
La classe NSPropertyListSerialization fournit des méthodes qui convertissent la propriété liste des objets vers et depuis plusieurs formats sérialisés. La liste de propriétés comprend NSData, NSString, NSArray, NSDictionary, NSDate et objets NSNumber.
Supposons que je voudrais sauver quelques personne objets (une famille) dont les attributs sont tous les types -liste des biens. La seule façon dont je-réussi à enregistrer ce au format XML est en faisant:
// 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];
qui générerait le fichier family.plist.
Notez, cependant, que mon objet Personne est en fait un objet NSDictionary (que je ne pense pas que le sous-classement serait une bonne idée) avec des attributs en tant que clés. Est-il possible de créer une classe Objective-C comme ceci:
@interface Person : NSObject {
NSString *_id;
NSString *_name;
NSNumber *_age;
}
@end
et sérialisation dans un fichier plist/XML? (J'ai besoin de sauvegarder l'objet au format texte (pas binaire) afin que je puisse éditer ces données dans un éditeur de texte et permettre à mon application de charger ceci à l'exécution, en convertissant normalement en objets Objective-C).
Merci à l'avance, Eduardo
Brian. J'ai lu des articles sur les archives et les sérialisations. Le point principal est que, comme vous l'avez dit, l'objet sera enregistré dans le fichier .plist sous la forme (NSData).Je pourrais faire des méthodes utilitaires pour représenter/initialiser la classe de personne avec un dictionnaire, mais ce n'est pas si différent de "sous-classer" ou en utilisant l'approche que j'ai mentionnée dans le post. J'espérais «encoder»/«décoder» des objets Objective-C au format XML à l'aide de l'API (soit en utilisant des sous-classes NSCoder, soit en utilisant PListSerialization). Peut-être que je devrais utiliser un analyseur XML et gérer tout seul sans la syntaxe plist, ce qui est mieux). –
J'ai décidé de ne plus utiliser .plist et d'utiliser à la place des fichiers XML + du DOM Parser. Il y a un joli tutoriel sur http://www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml. J'ai réalisé que la syntaxe plist n'est pas la plus appropriée à mes besoins, mais je m'attendais à ce que le SDK iPhone m'aide à réaliser la sérialisation de mes objets Objective-C (en mode XML) de manière directe, ce qui n'est pas le cas. –