从NSArray中检索类对象并添加到self

时间:2011-04-22 05:05:41

标签: objective-c cocos2d-iphone nsmutablearray nsarray

您好我试图从NSMutableArray中检索特定类的对象,然后将其添加到self:例如:

- (void) init{
     _Objects = [[NSMutableArray alloc]init];
     Psychicing *psy = [[Psychicing alloc]init];
     [psy startPsychic];
     [_Objects addObject: psy];
     [psy release];
}

这会创建一个类Psychicing的对象,然后运行[psy startPsychic]方法来创建类对象的内部。然后我将psy对象添加到_Objects NSMutableArray。

-(void)startPsychic{
      id psychicParticle = [CCParticleSystemQuad ......]; //is Synthesised with (assign)
      //Other things are set here such as position, gravity, speed etc...
}

当在屏幕上检测到触摸时,我想从_Objects数组中取出psy对象并将其添加到self:类似这样的东西(尽管这会产生运行时错误)

-(void) Touches.....{

     for (Psychicing *psy in _Objects){
          [self addChild: psy.psychicParticle];
     }
}

我希望我能够清楚地解释清楚,如果您需要更多说明,请告诉我 所以基本上:
[MainClass Init] - > [Psychicing startPsychic] - > [MainClass add to array] - > [MainClass add to self]

2 个答案:

答案 0 :(得分:1)

我假设_Objects(应该是遵循约定的小写o)存储除了Psychicing对象之外的对象,并且你试图在 - (void)Touches中从中拉出Psychicing对象。 ..方法(也应该是小写)。如果是这样,你可以这样做:

for (id obj in _Objects)
{
  if ([obj isMemberOfClass:[Psychicing class]])
    [self addChild:obj.psychicParticle];
}

这将导致仅将数组中的Psychicing对象作为子项添加到self。

如果您粘贴的代码是您的真实代码,看起来您确实有其他错误。 Init应定义为:

- (void) init{
     _Objects = [[NSMutableArray alloc]init];
     Psychicing *psy = [[Psychicing alloc]init];
     [psy startPsychic];
     [_Objects addObject: psy];
     [psy release];
}

将_Objects定义为类接口中的实例变量(或属性)。在你编写它时,它是init方法中的方法变量并且正在泄漏。因此,当您尝试在-touches中访问_Objects时,_Objects很可能是nil。

答案 1 :(得分:0)

好的,在McCygnus的帮助下,我得到了它的工作,唯一缺少指向id对象的指针:

 for (id obj in _Objects){
        if ([obj isMemberOfClass:[Psychicing class]]){
            Psychicing *apsy = obj;
            [apsy.psychicParticle setPosition:location];
            [self addChild:apsy.psychicParticle];
        }

    }