2011-07-09 173 views
1

我有以下的NSTimer調用如何將參數傳遞給@selector()?

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

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

,我需要一個布爾值傳遞給panelVisibility方法。我如何指定參數值?

+1

也許這將有助於:http://stackoverflow.com/questions/1349740/arguments-in-selector – blindjesse

回答

8

在這種情況下,你不這樣做。檢查reference docs

aSelector
要發送的消息定時器觸發時的目標。所述 選擇器必須具有以下 簽名:

  • (無效)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

你不能做到這一點。需要注意的是docs說的方法必須具有以下特徵:通過調用

- (void)timerFireMethod:(NSTimer*)theTimer 

使用userInfo參數傳遞一個[NSNumber nnumberWithBool:bool]和檢索:

BOOL isSomething = [[theTimer userInfo] boolValue]; 

裏面的方法燒製時調用的計時器。