1

我有一个 NSTimer,它的设置如下:

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

如何获取timerTarget方法的返回值?

4

3 回答 3

5

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

于 2009-03-01T02:09:44.383 回答
5

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

Quoth方法的文档scheduledTimerWithTimeInterval:::::

选择器必须具有以下签名:

- (void)timerFireMethod:(NSTimer*)theTimer

现在,您可以以不同的方式声明您的方法,然后在其中返回一个值,但是您的方法具有与 NSTimer 期望的不同的签名。现在可以正常工作,但不能保证将来可以正常工作——它可能随时中断,尤其是运行时的更改。

更重要的是,由于 NSTimer 不期望返回值,因此它没有规定可以接收一个并将其传递到任何地方。

此外,正如我在对亚当的回答的评论中所说,您的电话scheduledTimerWithTimeInterval:::::只返回一次,并且(正如亚当所说)它会立即返回。你不会每 0.5 秒得到一个返回值,因为你不会每 0.5 秒得到一个返回值——你得到一个返回值(每个计时器)。

Whatever information you're finding out in your timer method, you need to either act on it there or send a message with the information from there to another method.

于 2009-03-01T03:02:01.230 回答
1

跟进亚当的好回答,如果您觉得在目标方法完成运行后需要它的返回值,那么您可能想要做的是让目标方法本身继续执行一些进一步的操作。

例如,您可以使用“userInfo”参数传递对感兴趣对象(self?)的引用。然后,目标方法可以使用预先安排的选择器将更新的值发送给自身,而不是返回值。例如,在您的目标方法中,您可以以以下方式结束:

[[theTimer userInfo] setWhatever:blah];

从概念上讲,您需要听取 Adam 的建议,并考虑计时器调用的方法将在未来发生的事实,如果您想连接回特定的类及其工作流,您需要自己以某种方式连接它。

于 2009-03-01T02:58:36.573 回答