web-dev-qa-db-fra.com

NSArray ajout d'éléments

Je dois créer un NSArray dynamique, c'est-à-dire que je ne connais pas la taille du tableau ou quels éléments le tableau va avoir. Les éléments doivent être ajoutés dynamiquement au tableau. J'ai regardé la référence de classe NSArray. Il existe une méthode appelée arrayWithObjects, qui doit être utilisée au moment de l'initialisation du tableau lui-même. Mais je ne sais pas comment réaliser ce que je dois faire.

Je dois faire quelque chose comme ceci:

NSArray *stringArray = [[NSArray init] alloc] ;  
for (int i = 0; i < data.size; i++){  
    stringArray.at(i) = getData(i);
}
39
saikamesh

Si vous créez un NSArray, vous ne pourrez pas y ajouter d'éléments, car il est immuable. Vous devriez essayer d'utiliser NSMutableArray à la place.

Vous avez également inversé l'ordre de alloc et init. alloc crée une instance et init l'initialise.

Le code ressemblerait à ceci (en supposant que getData est une fonction globale):

NSMutableArray *stringArray = [[NSMutableArray alloc] init];
for(int i=0; i< data.size; i++){
   [stringArray addObject:getData(i)];
}
77
pgb

Voici une autre façon d'ajouter un objet dans un tableau si vous travaillez avec un tableau immuable. Ce qui est sûr pour les threads.

Vous pouvez utiliser la méthode arrayByAddingObject. Parfois, c'est beaucoup mieux. Voici une discussion à ce sujet: NSMutableArray vs NSArray qui est mieux

7
Danil

Convertissez votre NSArray en NSMutableArray, puis vous pouvez ajouter des valeurs de manière dynamique:

NSMutableArray *mutableStringArray = [stringArray mutableCopy];
[mutableStringArray addObject:@"theNewElement"];
3