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 回答