2011-04-29 6 views
5

Cela doit être assez basique, mais je me demandais comment ajouter un entier à un tableau?Comment ajouter un entier à un tableau?

Je sais que je peux ajouter des chaînes comme ceci:

NSMutableArray *trArray = [[NSMutableArray alloc] init]; 
[trArray addObject:@"0"]; 
[trArray addObject:@"1"]; 
[trArray addObject:@"2"]; 
[trArray addObject:@"3"]; 

Mais je pense que je ne peux pas simplement ajouter des entiers comme ceci:

NSMutableArray *trArray = [[NSMutableArray alloc] init]; 
[trArray addObject:0]; 
[trArray addObject:1]; 
[trArray addObject:2]; 
[trArray addObject:3]; 

Au moins le compilateur est pas heureux avec cette et me dit que je fais un casting sans l'avoir dit.

Toutes les explications seraient très appréciées.

Répondre

27

Oui, c'est vrai. Le compilateur n'acceptera pas votre code comme ceci. La différence est la suivante:

Si vous écrivez @"a String", c'est la même chose que si vous créiez une chaîne et que vous l'autoreliez. Vous créez donc un objet en utilisant @"a String".

Mais un tableau ne peut stocker que des objets (plus précis: des pointeurs sur l'objet). Vous devez donc créer des objets qui stockent votre entier.

NSNumber *anumber = [NSNumber numberWithInteger:4]; 
[yourArray addObject:anumber]; 

retrive l'entier à nouveau, fais comme ça

NSNumber anumber = [yourArray objectAtIndex:6]; 
int yourInteger = [anumber intValue]; 

J'espère que ma réponse vous aide à comprendre pourquoi il ne fonctionne pas. Vous ne pouvez pas convertir un entier en pointeur. Et c'est l'avertissement que vous obtenez de Xcode.

EDIT:

Il est maintenant possible d'écrire les éléments suivants

[yourArray addObject:@3]; 

qui est un raccourci pour créer un NSNumber. La même syntaxe est disponible pour les tableaux

@[@1, @2]; 

vous donnera un NSArray contenant 2 objets NSNumber avec les valeurs 1 et 2.

+0

Merci, je pense que je comprends maintenant. Votre explication est très bonne! –

+0

Merci. La réponse de mservidio est absolument correcte. Mais j'aime toujours avoir une explication. ;-) –

+0

Juste une question de suivi: Est-ce que 'number' est stocké dans mon tableau un entier (int) ou un NSInteger?Ou n'est-ce pas vraiment important? –

7

Vous devez utiliser NSNumbers je pense, essayez d'ajouter ces objets à votre tableau: [NSNumber numberWithInteger: myInt];

NSMutableArray *trArray = [[NSMutableArray alloc] init];  
NSNumber *yourNumber = [[NSNumber alloc] numberWithInt:5]; 

[trArray addObject: yourNumber]; 
+0

mservidio est correct. Je crois que la façon d'y penser est parce que '@" 2 "' est un objet 'NSString'. Cependant '2' en soi est une valeur, pas un objet. – dredful

+1

Pour développer, vous créez essentiellement une instance de l'objet NSNumber qui est une version d'objet de la primitive int ou quoi que ce soit, puis ajoute cet objet au tableau. De même, pour extraire la valeur primitive du tableau, utilisez [[myArray objectAtIndex: 0] intValue]; –

4

Vous pouvez également utiliser cette option si vous voulez utiliser des chaînes:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
[array addObject:[NSString stringWithFormat:@"%d",1]]; 
[[array objectAtIndex:0] intValue]; 
Questions connexes