Je pense que ce que vous voulez probablement faire est de créer des classes qui correspondent à ce que vous représentez dans votre fichier XML. Par exemple, si vous xml ressemble à ceci:
<peopleList>
<person>
<name>Joe</name>
<possession>Shovel</possession>
</person>
<person>
<name>Sam</name>
<possession>Shovel</possession>
<possession>Fork</possession>
<possession>Backpack</possession>
</person>
</peopleList>
Vous devriez avoir une classe PeopleList et une personne de classe. Un objet instancié à partir de la classe PeopleList a votre premier tableau qui contient un ou plusieurs objets Person. Les objets Person, à leur tour, ont aussi des tableaux pour contenir les possesions (qui dans ce cas sont des chaînes - bien que si nécessaire ils pourraient être des objets Possesion) Dans ce cas, pour aider l'exemple la classe Person a aussi une autre propriété: qui est aussi une chaîne.
Par exemple:
@interface PeopleList {
NSMutableArray *persons; // An array to store the Person objects
}
@property (nonatomic, retain) NSMutableArray *persons;
@end
@interface Person {
NSString *name;
NSMutableArray *possesions; //An array to store this Person's possesion strings
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSMutableArray *possesions;
@end
Dans la méthode de init ces objets que vous aurez à alloc/init les tableaux afin qu'ils soient prêts à recevoir des objets. Et parce que je les ai alloués, ma classe est responsable de la sortie.
@implementation PeopleList
-(id) init {
if (self = [super init]) {
persons = [[NSMutableArray alloc] init];
}
}
-(void) dealloc {
[persons release];
[super dealloc];
}
@end
@implementation PeopleList
-(id) init {
if (self = [super init]) {
possesions = [[NSMutableArray alloc] init];
}
}
-(void) dealloc {
[possesions release];
[super dealloc];
}
@end
Maintenant que cela est fait, vous pouvez configurer votre structure de données de tableaux en cascade. Comme vous analysez le fichier XML lorsque vous tombez sur un PeopleList Tag faire:
currentPeopleList = [[PeopleList alloc] init];
et quand vous tombez sur une personne tage faire un:
currentPerson = [[Person alloc] init];
[peopleList.persons addObject: person];
un possesion:
[currentPerson.possesion addObject: contentsOfCurrentElement];
ou nom:
currentPerson.name = contentsOfCurrentElement;
Mais pour répondre à votre question plus spécifique, je ne stocke pas les données dans un NSArray temporaire, puis copiez cela dans un NSMutableArray. Il n'y a presque aucun gain de performance en faisant ainsi, et vous brûlerez des cycles de cpu et la mémoire faisant la copie.