for in循环返回错误的对象

时间:2012-08-02 17:13:42

标签: iphone objective-c ipad cocos2d-iphone for-in-loop

我有一个in循环,我没有得到我期望得到的对象。

我有一个名为MainLayer的CCLayer类,我在其中添加了类MyUniqueClass的子级。但是,如果我尝试获取所有MyUniqueClass个对象,我也会获得其他CCNode对象。这是我在MainLayer中所做的事情:

for (MyUniqueClass *mUC in self.children){

        NSLog(@"%@", mUC); //Here I get all kinds of objects 

}

2 个答案:

答案 0 :(得分:4)

尝试找出CCNode对象存在的原因。不知怎的,他们已经被添加为孩子。

或者只是忽略它并执行此操作以过滤掉其他节点类:

Class uniqueClass = [MyUniqueClass class];
for (MyUniqueClass *mUC in self.children)
{
    if ([mUC isKindOfClass:uniqueClass])
    {
        NSLog(@"%@", mUC);
    }
}

答案 1 :(得分:2)

您似乎相信将循环变量键入为MyUniqueClass *将导致循环仅覆盖属于该类的对象。这不是枚举的工作速度。它根本不与类型检查器交互。给循环变量提供一个静态类型只是让编译器对你在循环体中所做的事情进行类型检查(因此,如果你不小心使用像文本视图这样的文本字段,它可以发出警告)并让你使用点语法访问对象的属性。如果您只想对某个类的对象进行操作,则必须明确检查循环体as shown by LearnCocos2D