J'ai une structure de données que je voulais énumérer. J'ai essayé de mettre en œuvre NSFastEnumerator de mon objet comme suit:Implémentation de NSFastEnumerator: EXC_BAD_ACCESS lors de l'itération avec pour ... dans
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
objects:(__unsafe_unretained id [])buffer
count:(NSUInteger)len {
NSUInteger c = 0;
while (c < len) {
id obj = [self objectAtIndex:state->state];
if (obj == nil) break;
buffer[c] = obj;
c++;
state->state++;
}
state->itemsPtr = buffer;
state->mutationsPtr = nil;
return c;
}
Si je objectAtIndex directement, mon objet fonctionne correctement. Je reçois un zéro quand l'indice n'existe pas. Mais quand je puis utiliser la boucle for:
for (Pin *pin in coll) { ... }
le code passe par l'amende de fonction ci-dessus et remplit état avec ce qui semble être des valeurs valides et renvoie le nombre d'objets, puis je reçois un échec de EXC_BAD_ACCESS au pour l'énoncé lui-même.
Qu'est-ce que je fais mal dans cette mise en œuvre?
Ma objectAtIndex: méthode est supportée par un NSMutableArray dessous, et toute la gestion de la mémoire est gérée par le réseau. La signature de la méthode est générée par XCode lui-même, donc je suppose que c'est correct, mais je ne sais pas avec certitude. – Monopol
Oui, je pense que c'est correct, je le vois dans mes fichiers d'en-tête. Si vous utilisez un NSMutableArray je ne peux pas imaginer pourquoi ce serait un problème. Je recommande de demander sur http://devforums.apple.com. – jtbandes