2016-08-12 6 views
0

Я смотрел this, но не нашел решение.Check Objective-C класс блока

У меня есть таймер

self.checklinkTimer = [NSTimer scheduledTimerWithTimeInterval:5 
                  target:self 
                 selector:@selector(doWithHandler:) 
                 userInfo:nil 
                  repeats:YES]; 

и метод

-(void) doWithHandler:(void (^)(BOOL isValid))handler 
{ 
    handler(isSessionValid); 
} 

и другой метод, где я использовать логическое значение из doWithHandler метода.

В doWithHandler Мне нужно проверить, является ли обработчик классом NSTimer, и в этом случае не делать handler(isSessionValid).

Я пробовал if (! [(id)handler isKindOfClass:[NSTimer class]]) или @try @catch, но это не работает.

Вопрос: как я могу проверить класс блока?

+0

«но это не работает так»: Пожалуйста, объясните. –

+3

Почему этот параметр никогда не был чем-то иным, чем 'NSTimer'? – Droppy

+0

Документы: «Таймер передает себя как аргумент, таким образом, метод примет следующий шаблон: - (void) timerFireMethod: (NSTimer *) timer». –

ответ

0

вы можете надеть что-то подобное, что вместо вашей оригинальной идеи для достижения того же поведения:

self.checklinkTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES]; 

тогда у вас есть:

- (void)timerFireMethod:(NSTimer *)timer { 
    [self doWithHandler:nil]; 
} 

где

- (void)doWithHandler:(void (^)(BOOL isValid))handler { 
    if (handler) handler(isSessionValid); // I don't know where `isSessionValid` comes from... 
}