您好我试图从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]
答案 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];
}
}