0

children_( )的计数CCArray输出 15,我收到错误:

'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

似乎您正在使用 count-1 初始化 for 循环计数器并递增,因此 i 的第一个值是 14 ,下一个值是 15 (超出范围)

尝试这个 :

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