/ Problème de boucle / NSArray - objectif-c, c, pour-boucle, nsarray

Problème de boucle NSArray - Objective-c, c, for-loop, nsarray

J'ai un problème dans une boucle Je mets un NSArray dans une table et je veux que le dernier objet soit dans la première cellule, mais cela ne fonctionne qu'avec le premier objet.

cela marche:

for(int i = 0; i < messages.count ; i++)
{
}

mais cela ne "t:

 for(int i = messages.count; i > 0; i--)
{
}

et le message d'erreur est:

Terminating app due to uncaught exception "NSRangeException", reason: "*** -[__NSArrayM objectAtIndex:]: index 203 beyond bounds [0 .. 202]"
*** First throw call stack:
(0x32bd33e7 0x3a8c4963 0x32b1eef9 0x891d3 0x34a01579 0x34a561f7 0x34a5613d 0x34a56021 0x34a55f4d 0x34a55699 0x34a55581 0x34a26561 0x349e58c7 0x34791513 0x347910b5 0x34791fd9 0x347919c3 0x347917d5 0x349eb93f 0x32ba8941 0x32ba6c39 0x32ba6f93 0x32b1a23d 0x32b1a0c9 0x366f833b 0x34a362b9 0x8549d 0x3acf1b20)
libc++abi.dylib: terminate called throwing an exception

Réponses:

4 pour la réponse № 1

vous devez démarrer la boucle au nombre de messages -1, comme ceci:

for (int i = messages.count - 1; i >= 0; i--)
{
...
}

Depuis messages.count donnera le nombre total d'éléments contenus dans l'objet messages. Le plus grand indice d'élément dans le tableau sera le messages.count - 1 puisque les indices du tableau commencent à 0.


1 pour la réponse № 2

for(int i = 0; i < messages.count ; i++) boucles de 0 Jusqu'à messages.count-1 (ça s'arrête quand i == messages.count).

for(int i = messages.count; i > 0; i--) boucles de messages.count jusqu'à 1, un ensemble d'indices totalement différent.

Écrire

for(int i=messages.count-1; i>=0; i--)

à la place, ou utilisez ceci:

int i = messages.count;
while(i --> 0) {
...
}

ou simplement utiliser reverseObjectEnumerator:

for(id element in [messages reverseObjectEnumerator]) {
...
}

0 pour la réponse № 3

Intervalles semi-ouverts. Il y a Aucun objet à [array objectAtIndex:array.count]. Si, par exemple, votre tableau contient 5 objets, il existe des objets aux indices 0, 1, 2, 3 et 4.

De plus, dans le second cas, le compteur doit aller jusqu'à 0, sinon vous ne prenez pas en considération le premier objet (celui de l’indice 0) (encore une fois: la partie fermée de l’intervalle de demi-ouverture est à 0, l’objet ouvert est à array.count).

Dans l'ensemble: changez la deuxième boucle en

for (int i = messages.count - 1; i >= 0; i--)

et ça marchera bien.