2009-03-01 24 views
1

的返回值我有一个NSTimer是设置这样的:获取的NSTimer的目标

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES]; 

我怎样才能得到timerTarget方法的返回值?

回答

5

你不能,因为没有返回值。

答曰documentation of the scheduledTimerWithTimeInterval::::: method

选择器必须具有以下特征:

- (void)timerFireMethod:(NSTimer*)theTimer 

现在,你可以宣布你的方法不同,然后在它返回一个值,但那么你的方法与NSTimer期望的签名不同。现在可以正常工作,但不能保证在将来工作 - 它可能在任何时候中断,特别是运行时的变化。

更重要的一点是,由于NSTimer不期待返回值,因此它没有规定接收一个并将它传递到任何地方。此外,正如我在评论Adam的回答时所说的,您拨打scheduledTimerWithTimeInterval:::::的电话只会返回一次,并且(如Adam所说)立即发生。您每0.5秒就不会得到一个返回值,因为您每0.5秒就不会得到一个返回值 - 只有一个返回只有(每个计时器)。

无论您在定时器方法中找到什么信息,您都需要在那里采取行动,或者将信息从那里发送到另一种方法。

5

你对返回值做什么?目标在0.5秒后异步运行。对scheduledTimerWithTimeInterval:target:selector:useInfo:repeats:的呼叫立即返回,此时目标尚未运行。如果你真的需要返回值现在,那么不要打扰计时器,只是通常调用选择器。

+0

我需要每0.5秒的返回值。目标是监视一个经常变化的值,并返回该值,以便我可以看到实际发生的变化。 – macinjosh 2009-03-01 02:15:59

1

继续Adam的良好答案,如果您觉得在完成运行后您需要目标方法的返回值,那么您可能想要做的就是让目标方法自行延续一些进一步的操作。例如,您可以使用“userInfo”参数来传递对感兴趣对象(self?)的引用。然后,目标方法可以不用返回值,而是使用预先安排的选择器将更新后的值发送给自己。比如在你的目标的方法,你可以用类似结尾:你需要采取亚当的意见和考虑的是,该方法由计时器称为

[[theTimer userInfo] setWhatever:blah]; 

概念在未来发生的事情,如果你想连接到一个特定的类和它的工作流程,你需要以某种方式连接它自己。