如何将参数传递给@selector()?

时间:2011-07-09 00:29:29

标签: objective-c

我有以下NSTimer电话

[NSTimer scheduledTimerWithTimeInterval:2.0
                               target:self
                             selector:@selector(panelVisibility:)
                             userInfo:nil
                              repeats:NO];

-(void)panelVisibility:(BOOL)visible{
...
}

我需要将BOOL值传递给panelVisibility方法。如何指定参数值?

2 个答案:

答案 0 :(得分:8)

在这种情况下,你没有。查看reference docs

  

aSelector
  定时器触发时发送到目标的消息。该   选择器必须具有以下内容   签名:

     
      
  • (void)timerFireMethod:(NSTimer *)theTimer
  •   
     

计时器自身传递为   这种方法的论据。

因此,panelVisibility:方法可以接受的唯一参数是NSTimer*,计时器会自动为您传递此参数。

但是,您可以使用userInfo字段传递您想要的任何其他信息。例如,您可以这样做:

[NSTimer scheduledTimerWithTimeInterval:2.0
                               target:self
                               selector:@selector(panelVisibility:)
                               userInfo:[NSNumber numberWithBool: myBool]
                               repeats:NO];

...然后:

-(void)panelVisibility:(NSTimer*)theTimer{
    BOOL visible = [theTimer.userInfo boolValue];
    //...
}

答案 1 :(得分:1)

你做不到。请注意,docs表示该方法必须具有以下签名:

- (void)timerFireMethod:(NSTimer*)theTimer

使用userInfo参数传递[NSNumber nnumberWithBool:bool]并通过调用

来检索它
BOOL isSomething = [[theTimer userInfo] boolValue];

在方法内部,计时器在被触发时调用。