的NSTimer与委托方法

的NSTimer与委托方法

问题描述:

我试图建立一个NSTimer上的委托 - 我很很新的Objective-C的所以道歉,如果这没有多大意义。但我写的是:的NSTimer与委托方法

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0/60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView) userInfo:nil repeats:TRUE]; 

不幸的是,这只是行不通的。有人能指引我朝着正确的方向吗?我的心已经炸了!

+0

对不起,我在崩溃报告得到的错误是这样的: [mugalugAppDelegate drawView函数]:无法识别的选择发送到实例 这意味着它不能找到方法吧? – FlimFlam 2010-01-29 16:30:42

你说得对。

只是在方法名,即@selector(drawView函数:)添加冒号。另外,按照惯例,Objective-C编码器使用YES和NO。

+0

啊,非常感谢你 - 工作! – FlimFlam 2010-01-29 17:18:48

最有可能为drawView方法签名不正确。从NSTimer类参考:

当定时器触发时要发送到目标的消息。选择器必须具有 以下特征:

- (void)timerFireMethod:(NSTimer*)theTimer

所以,你drawView方法应该是这样的:

- (void)drawView:(NSTimer*)theTimer 
{ 
// Draw the view 
} 

另外,纠正你的代码是这样(注意冒号后面“drawView”):

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0/60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView:) userInfo:nil repeats:TRUE]; 

在附注中,我不知道你的drawView是谁负责(我会假设绘制一个视图)。但是,内置的绘图机制应该遵循(除了极少数情况外)。通常,如果你有一个NSView,你可以调用setNeedsDisplay,这会导致UI通过调用你的NSView的drawRect:告诉你的NSView重绘自己。我只提到这点,因为你说你是Objective-C的新手,所以你可能没有意识到这一点,并最终编写比你需要的更多的代码。如果您遵循此设计,您可以定期拨打setNeedsDisplay