Как передать аргумент в @selector ()? - PullRequest
1 голос
/ 09 июля 2011

У меня следующий вызов NSTimer

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

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

где мне нужно передать значение BOOL в метод panelVisibility. Как мне указать значение параметра?

Ответы [ 2 ]

8 голосов
/ 09 июля 2011

В этом случае вы не делаете.Проверьте справочные документы :

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 голос
/ 09 июля 2011

Вы не можете этого сделать.Обратите внимание, что docs говорит, что метод должен иметь следующую подпись:

- (void)timerFireMethod:(NSTimer*)theTimer

Используйте параметр userInfo, чтобы передать [NSNumber nnumberWithBool:bool] и получить его, вызвав:

BOOL isSomething = [[theTimer userInfo] boolValue];

Внутри метода таймер вызывается при срабатывании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...