0

レイヤー (HUDLayer) のすべての子を反復処理して削除しようとしています。私はこのタスクを次のように達成しようとしています:

    for(id *item in HUDLayer.children_)
    {
        [self removeChild:item cleanup:YES];
    }

しかし、エラーが発生します -> 式に有効なオブジェクト型がありません

誰かが私の問題に光を当てることができますか?

ありがとうございました

4

2 に答える 2

2
for(id *item

おっと。idオブジェクト自体 (およびポインターも) であり、アスタリスクは必要ありません。

for(id item in HUDLayer._children)

大丈夫なはずです。

于 2012-11-26T20:20:58.853 に答える
0

別の問題について少しグーグルを行った後、これにたどり着きました。

親からオブジェクトを削除しようとしています (HUDLayer)。他の誰かが「自己」の問題に答えました。でも...

あなたが言った...

for(id *item in HUDLayer.children_) {
    [self removeChild:item cleanup:YES];
}

...しかし、ループの突然変異を起こさずに子ノードを削除しようとしている他の人に役立つかもしれないと思ったので、以下のコードを追加します。

for(id item in HUDLayer.children) {
    // If it's a sprite that you want to remove
    if ([item isKindOfClass:[CCSprite class]]) {
        // Use this to remove or else you'll have a loop mutation.
        [item removeFromParentAndCleanup:YES];
    }
}

とにかく、それが誰かに役立つことを願っています。

笑 - 今これを編集しています。私が (推測) 反復してから削除すると、親が配列の突然変異を引き起こす可能性があります。したがって、最初にすべての子要素を配列に配置するように上記を修正し、次に IN REVERSE を反復処理して、それに基づいてオブジェクトを削除しています。このようにして、配列の変更が回避されます。下記参照:

NSArray *items = [[NSArray alloc] initWithArray: HUDLayer.children];

for (long i = items.count - 1; i >= 0; i--) {
    id item = items[i];
    if ([item isKindOfClass:[CCSprite class]] ||
        [item removeFromParentAndCleanup:YES];
    }
}

items = nil;

繰り返しますが、誰かの役に立てば幸いです。

于 2014-10-26T09:12:52.643 に答える