【发布时间】:2011-06-18 22:51:39
【问题描述】:
所以我这样做是为了初始化我的选择器:
//In .h
SEL selectors[3];
//In .m
selectors[0] = @selector(rotate);
selectors[1] = @selector(discharge);
这就是问题所在:
当我在 Cocos2d 的 init 方法中这样调用时:
[self performSelector:selectors[0]];
它工作得很好,但是当我在一个名为 moveThings 的方法中调用这行代码时,该方法在 Cocos2d 中的 init 方法结束时通过调度 ([self schedule:@selector(moveThings:)]) 调用,它给出了EXC_BAD_ACCESS。安排事情有什么问题?
更新:
我发现旋转函数存在问题(该函数存储在选择器 [0] 中)。这里是:
-(void)rotate:(ccTime)delta {
if (((CCSprite *)[creature objectAtIndex:0]).rotation < 360) {
((CCSprite *)[creature objectAtIndex:0]).rotation++;
}
else {
((CCSprite *)[creature objectAtIndex:0]).rotation++;
}
}
如果我将方法的内容注释掉,它在通过 moveThings 和 init 调用时可以正常工作。
如果我更改方法内容:
((CCSprite *)[creature objectAtIndex:0]).rotation++;
它失败了......但是,我想再次声明,如果我在我的 init 方法中调用它,所有这些东西都可以工作,甚至连续调用它两次,但它不会工作(除非我取出 rotate 方法的内容)如果我通过 moveThings: 方法调用它,该方法正在通过 schedule 方法调用它失败。
进一步更新:
如果我打电话:
((CCSprite *)[creature objectAtIndex:0]).rotation++;
在 moveThings 中(正如我之前所说,由 schedule:(SEL) 方法调用)它失败了。只要不是通过调度调用的方法调用它,它就可以工作。
【问题讨论】:
-
崩溃日志到底说了什么?
-
@Deepak:对不起,我一直编辑错了...我没有粘贴它,应该有...选择器适用于 moveThings 只是不适用于选择器[0]...
-
@Deepak:崩溃日志显示
Program recieved EXC_BAD_ACCESS -
哪一个失败了?
[self schedule:@selector(moveThings:)];或[self schedule:selectors[0]]; -
@Deepak:
[self schedule:selectors[0]];在 moveThings 方法内部调用。
标签: objective-c cocos2d-iphone selector