1

嗨,我正在使用 cocos2d 开发一个 iphone 应用程序。它显示了这个消息。

2009-01-26 16:17:40.603 Find The Nuts[449:20b] *** -[NSCFArray onTimer:]: unrecognized selector sent to instance 0x59be030
2009-01-26 16:17:40.605 Find The Nuts[449:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray onTimer:]: unrecognized selector sent to instance 0x59be030'  

这里的 onTimer 是一个倒计时方法。它的解决方案是什么?

4

4 回答 4

4

由于某种原因,您的 onTimer 方法被发送到 NSArray 的实例。您可能不小心将它发送到 NSArray 的真实实例,或者您真正尝试将其发送到的对象在计时器实际触发时已被释放(也就是不再可访问)。

我会尝试进行一些内存调试,以确定您的计时器目标是否在不适当的时间被释放。如果一切正常,请确认您确实将计时器目标设置为正确的对象。

于 2009-01-26T11:13:16.923 回答
3

The unrecognized selector error is most likely because you are passing the wrong text for the @selector parameter. Selector names MUST include ':' attributes whenever there is a parameter in the signature. So, if you have a timer method

-(void) onTimer:(NSTimer*)timer { ... }

The selecter you pass to scheduledTimerWithTimeInterval must be:

@selector(onTimer:)   // note the ':' at the end of the name!

The full call to NSTimer, would then look something like:

[NSTimer scheduledTimerWithTimeInterval:1 
                                 target:self 
                               selector:@selector(OnTimer:) // note the ':'
                               userInfo:nil
                                repeats:NO];
于 2009-06-15T03:22:48.070 回答
0

听起来您没有为计时器提供有效的方法来在倒计时完成时调用。您需要将方法选择器和目标都设置为有效对象。见下面的例子:

[NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

- (void)onTimer {
     NSLog(@"hello!"];
}

也许目标在它返回之前就被释放了?

您也可以尝试添加以下断点,这些断点将在发生异常时捕获。

objc_exception_throw 和 -[NSException raise]。在 iPhone 上,我认为所有异常都通过 objc_exception_throw 传播,但如果您的目标是 Mac OS X Tiger 或更早版本,您应该在两者上设置断点。

在http://www.cocoadev.com/index.pl?DebuggingTechniques有更多的调试技术。

托尼

于 2009-01-26T10:54:10.813 回答
0

为什么在 NSArray 对象上调用 onTimer 方法?根据您的描述,我相信 onTimer 有这个定义

-(void)onTimer:(NSTimer *)aTimer

在这种情况下,onTimer 是您的视图控制器(或您创建的另一个类)的方法,但不是数组的方法。你是如何调用定时器的?启动将调用此方法的计时器的正确方法是

[NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];

发生此错误的原因是您没有正确调用计时器,或者您正在使用某些已被释放的对象。

于 2009-01-27T06:21:35.640 回答