将参数与NSTimer和常规调用一起传递给相同的方法

时间:2014-07-09 23:48:48

标签: objective-c cocoa nstimer

我需要将一个整数传递给我的方法startEvent:。该方法是计时器的动作方法。我已经阅读了如何使用userInfo传递数据,但是我不明白如何做到这一点,所以我仍然可以像往常一样调用该方法。

如何将NSTimer和常规调用中的整数传递给相同的方法?

[NSTimer scheduledTimerWithTimeInterval:0.032f target:self selector:@selector(startEvent:) userInfo:nil repeats:NO];

[self startEvent: 0];

-(void)startEvent:(int) event {
// ...
}

2 个答案:

答案 0 :(得分:1)

为计时器的操作方法使用传递:

- (void)startEventFromTimer:(NSTimer *)tim
{
    [self startEvent:[[tim userInfo] intValue]];
}

您的计时器是使用NSNumber为其用户信息对象创建的。

[NSTimer scheduledTimerWithTimeInterval:0.032f 
                                 target:self 
                               selector:@selector(startEventFromTimer:) 
                               userInfo:@(theIntYouWantToPass)
                                repeats:NO];

答案 1 :(得分:0)

你是从一个根本的误解开始的。您的方法不能是定时器操作方法,除非它符合记录的签名。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html

  • (void)timerFireMethod:(NSTimer *)timer

您必须传递其他信息的唯一机会是通过userinfo对象,正如Josh Caswells的答案所示。