0 votes

Remplacer un tableau par un tableau

J'ai un NSMutableArray et je veux le remplacer par un autre, mais si j'essaie de le faire comme ceci...

firstArray = secondArray;

...puis il semble effacer tout le firstArray et j'obtiens ce message d'erreur...

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

...et les limites devraient être (6) et non (0).

Existe-t-il une manière correcte de remplacer le tableau ?

PS : J'ai déjà vérifié le second tableau et il fonctionne bien.

1voto

walkytalky Points 7065

Si vous voulez faire le firstArray en une référence à la seconde, faites ceci :

[firstArray release];
firstArray = [secondArray retain];

Si vous voulez faire firstArray une copie du second, faites :

[firstArray release];
firstArray = [secondArray mutableCopy];

(Dans les deux cas, le release présuppose que vous avez alloué le tableau ou que vous avez précédemment retain -ed ou copy - l'a fait. Sinon, vous pouvez sauter cette partie. Dans tous les cas, le nouveau tableau vous appartient et vous devez release au moment opportun).

Si vous voulez remplacer le contenu du premier tableau par celui du second (ce qui n'est pas très différent de la copie, mais implique une destruction et une création d'objet en moins), alors je pense que vous devrez faire quelque chose comme ceci :

[firstArray removeAllObjects];
[firstArray addObjectsFromArray:secondArray];

0voto

Preston Points 1314

Vous assignez le pointeur du premier tableau à celui du deuxième tableau, donc vous perdez la référence à l'objet du premier tableau, et il y a une fuite. Si vous voulez remplacer les objets de l'objet firstArray, utilisez quelque chose comme -replaceObjectsInRange:withObjectsFromArray: ou simplement -release l'objet firstArray et affecte firstArray à l'objet [secondArray mutableCopy] .

Je vous recommande de vous documenter sur les pointeurs en C ainsi que sur les règles de gestion de la mémoire en Objective-C pour vous assurer que vous maîtrisez bien les principes fondamentaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X