web-dev-qa-db-fra.com

Comment ajouter des valeurs à un tableau dans Objective-C

Je fais ça:

for(int i=0;i>count;i++)
{
    NSArray *temp=[[NSArray alloc]initWIthObjects]i,nil];
    NSLog(@"%i",temp);
}

Il me revient 0,1,2,3 .... en comptant un par un, mais je veux un tableau avec en annexe ces valeurs {0,1,2,3,4,5 ...}. Ce n'est pas un gros problème, mais je ne peux pas le trouver. Je suis nouveau sur iPhone.

28
user440485
NSMutableArray *myArray = [NSMutableArray array];

for(int i = 0; i < 10; i++) {
   [myArray addObject:@(i)];
}

NSLog(@"myArray:\n%@", myArray);
65
vodkhang

Ce code ne fait pas ce que vous voulez qu'il fasse pour plusieurs raisons:

  1. NSArray n'est pas une classe "mutable", ce qui signifie qu'elle n'est pas conçue pour être modifiée après sa création. La version modifiable est NSMutableArray, ce qui vous permettra d'ajouter des valeurs.

  2. Vous ne pouvez pas ajouter de primitives comme int à une classe NSArray ou NSMutableArray; ils ne tiennent que des objets. La classe NSNumber est conçue pour cette situation.

  3. Vous perdez de la mémoire chaque fois que vous allouez un tableau. Associez toujours chaque appel à alloc avec un appel correspondant à release ou autorelease.

Le code que vous voulez est quelque chose comme ceci:

NSMutableArray* array = [[NSMutableArray alloc] init];
for (int i = 0; i < count; i++)
{
    NSNumber* number = [NSNumber numberWithInt:i]; // <-- autoreleased, so you don't need to release it yourself
    [array addObject:number];
    NSLog(@"%i", i);
}
...
[array release]; // Don't forget to release the object after you're done with it

Je vous conseille de lire le Cocoa Fundamentals Guide pour comprendre certaines des bases.

12
Shaggy Frog

Un moyen plus court que vous pourriez faire est:

NSMutableArray *myArray = [NSMutableArray array];

for(int i = 0; i < 10; i++) {

   [myArray addObject:@(i)];
}

NSLog(@"myArray:\n%@", myArray);
1
JackyW