2010-07-06 4 views
1

J'ai des problèmes pour initialiser un NSArray et y ajouter des entiers. Voici mon code, que j'ai commenté dans ce que j'essaie d'accomplir. Mon application se bloque lors de l'ajout d'un objet, mais je ne sais pas, si je supprime correctement le tableau.Initialisation de NSArray et ajout d'un NSInteger

//CREATE AND INITIALIZE AN ARRAY 
NSArray *ticket;               
ticket = [[NSArray alloc] init]; 

//slotA,slotB,slotC are of type NSInteger that I am trying to add 
//to the array (THIS CRASHES) 

[ticket addObject:[NSNumber numberWithInt:slotA]]; 
[ticket addObject:[NSNumber numberWithInt:slotB]]; 
[ticket addObject:[NSNumber numberWithInt:slotC]]; 

//I never got to this line of code but I think it has to be wrong 
//because this would throw the whole //array away. I dont want it 
//to be thrown away I just wanna clear it out but keep it instanciated. 

[ticket release]; 

J'ai essayé, mais le dire que je suis « manque un appel de fonction Sentinal »

NSArray *ticket; 
NSString *sltA=[NSString stringWithFormat:@"%d", slotA]; 
NSString *sltB=[NSString stringWithFormat:@"%d", slotB]; 
NSString *sltC=[NSString stringWithFormat:@"%d", slotC]; 
ticket = [[NSArray alloc] initWithObjects:sltA,sltB,sltC]; 

Aussi, dois-je changer les entiers en chaîne pour les mettre dans un tableau?

+0

J'ai essayé ceci, mais c'est dire qu'il me manque un appel de fonction sentinelle NSArray * ticket; \t \t \t \t \t \t \t \t \t \t NSString * Slta = [NSString stringWithFormat: @ "% d", Slota]; \t \t \t \t \t NSString * sltB = [NSString stringWithFormat: @ "% d", emplacementB]; \t \t \t \t \t NSString * sltC = [NSString stringWithFormat: @ "% d", emplacementC]; \t \t \t \t \t \t \t \t \t \t ticket = [[NSArray alloc] initWithObjects: Slta, SLTB, SLTC]; Aussi, ai-je aussi changé les entiers en chaîne pour les mettre dans un tableau? –

Répondre

4

Modifiez NSArray dans un NSMutableArray. Cela vous permettra d'ajouter et de supprimer des objets. NSArray est un tableau qui n'est pas censé être modifié après sa création. NSMutableArray est juste une sous-classe de NSArray et possède de nombreuses fonctions qui vous aideront à ajouter et à supprimer des objets à n'importe quel point du tableau.

+1

... ou utilisez '-initWithObjects:'. –

+0

qui ne fonctionnerait que si le tableau ne sera jamais modifié. Peut-être qu'il va changer slotA avant qu'il ne veut l'ajouter à la matrice. –

+0

pouvez-vous donner un exemple de code –

-1

Le code semble correct (techniquement, vous devez utiliser +numberWithInteger: au lieu de +numberWithInt:, mais il va certainement pas provoquer un accident.) Quel est l'accident que vous voyez? Pouvez-vous poster la sortie de GDB/Xcode?

+1

Le code n'est pas correct. Les objets 'NSArray' sont immuables. – zneak

+0

Et 'numberWithInt:' n'est pas obsolète, il n'y a donc aucune raison de préférer 'numberWithInteger:'. – zneak

+2

Oof, négligé la classe de l'objet. '+ + numberWithInt:' n'est pas obsolète, mais c'est la mauvaise méthode à utiliser avec un 'NSInteger'. '+ numberWithInt:' est pour 'int's, qui sont d'un type différent (par typedef sur iPhone et Mac 32 bits, et par type réel sur Mac 64 bits.) –