0

children_( )のカウントはCCArray15を出力し、エラーが発生します。

'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];
        }
    }

これをどのように解決しますか?文字列値を変更するために、すべてのラベルを削除しようとしています。私のCCLayerには、CCMenuItemLabelとCCMenuItemLabelAndSpriteもあります...

4

3 に答える 3

4

コレクションクラスを逆方向に反復するように見えるのでi--、インデックス変数を変更するために実行する必要があります。

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

    CCNode *c = [children_ objectAtIndex:i];

    if ([c isKindOfClass:[CCLabelTTF class]]) {
        [c removeFromParentAndCleanup:YES];
    }
}
于 2012-04-10T11:28:47.897 に答える
3

可能であれば、高速列挙を使用する必要があります。

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

またはブロック構文を使用

[children_ enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    if ([obj isKindOfClass:[CCLabelTTF class]]) {
        [obj removeFromParentAndCleanup:YES];
        stop= YES;
    };
}];
于 2012-04-10T11:38:06.567 に答える
2

forループカウンターをcount-1で初期化し、インクリメントしているようです。したがって、iの最初の値は14になり、次の値は15(範囲外)になります。

これを試して :

for (NSInteger i=0; i<[children_ count]; i++) {
}
于 2012-04-10T11:30:39.113 に答える