itinerer dans une collection pour supprimer des elements
bonjour,
j'ai un doute sur ma soluce.
pseudo-code
soit un NSMutableArray *requests
.../...
volatile int nRequests = [requests count];
for(int iRequest = 0; iRequest<nRequests; iRequest++) {
BC_Request *request = [requests objectAtIndex:iRequest];
if(condition pour suppression) {
[requests removeObject:request];
nRequests--;
iRequest--;
}
}
ca semble crade?
y-a t'il une forme canonique?
j'ai un doute sur ma soluce.
pseudo-code
soit un NSMutableArray *requests
.../...
volatile int nRequests = [requests count];
for(int iRequest = 0; iRequest<nRequests; iRequest++) {
BC_Request *request = [requests objectAtIndex:iRequest];
if(condition pour suppression) {
[requests removeObject:request];
nRequests--;
iRequest--;
}
}
ca semble crade?
y-a t'il une forme canonique?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il serait plus prudent soit de créer un autre NSMutableArray dans lequel tu insères les éléments à supprimer puis à la sorti de la boucle tu appelle la méthode - (void)removeObjectsInArray:(NSArray *)otherArray sur 'requests'. Ou tu conserves les index des éléments à supprimer dans un NSIndexSet et de même tu appelle - (void)removeObjectsAtIndexes:(NSIndexSet *)indexes.
Il est toujours dangereux de modifier les éléments d'un tableau dans une boucle d'itération.
Il y a bien les Fast Enumerations qui ont une syntaxe moins lourde mais elles ne sont pas faites pour que le NSMutableArray soit changé en cours de route...
Lien documentation : Fast Enumeration
Donc personnellement je fais une Array intermédiaire comme a dit Lexxis, grâce à une Fast Enumeration (et là on peut).
Merci pour tout. il faut que j'arrete de coder a 2h du mat