2012-04-10 17 views
0

Die Zahl children_ (CCArray) ausgibt, 15 und ich empfange Fehler:in objectAtIndex Ziel c

'NSInternalInconsistencyException', reason: 'index out of range in objectAtIndex(14), index 15' 

for (NSInteger i=[children_ count]-1; i>=0; i++) { 

     CCNode *c = [children_ objectAtIndex:i]; 

     if ([c isKindOfClass:[CCLabelTTF class]]) { 
      [c removeFromParentAndCleanup:YES]; 
     } 
    } 

Wie würde ich dieses Problem lösen? Versuchen, alle Beschriftungen zu entfernen, um ihren Zeichenfolgenwert zu ändern. Auf meinem CCLayer habe ich habe auch einige CCMenuItemLabel und CCMenuItemLabelAndSprite ...

Antwort

4

Es sieht aus wie Sie rückwärts durch die Collection-Klasse zu durchlaufen wollen, so können Sie i-- ausführen müssen die Indexvariable ändern:

for (NSInteger i=[children_ count]-1; i>=0; i--) { 

    CCNode *c = [children_ objectAtIndex:i]; 

    if ([c isKindOfClass:[CCLabelTTF class]]) { 
     [c removeFromParentAndCleanup:YES]; 
    } 
} 
+0

Oh, danke; Ich weiß nicht, wie ich das verpasst habe: P –

2

Es scheint, dass Sie Ihre für Schleifenzähler mit Count-1 und Erhöhen initialisiert wird, so dass der erste Wert von i 14 sein würde, und die nächsten 15 (außerhalb des Bereichs)

Versuchen Sie folgendes:

für (NSInteger i = 0; i < [children_ count]; i ++) {}

3

Sie fast enumerating wenn möglich nutzen sollten:

for (id obj in [childres_ reverseObjectEnumerator]){ 
    if ([obj isKindOfClass:[CCLabelTTF class]]) { 
     [obj removeFromParentAndCleanup:YES]; 
    } 
} 

oder mit dem block syntax

[children_ enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop){ 
    if ([obj isKindOfClass:[CCLabelTTF class]]) { 
     [obj removeFromParentAndCleanup:YES]; 
     stop= YES; 
    }; 
}];