2014-01-08 1 views
1

Я столкнулся с сбоем при использовании +[NSTimer scheduledTimerWithTimeInterval:invocation:repeats] на iOS 7. Код достаточно прост; здесь находится копия (с переменными переименованиями) целиком.NSTimer + NSInvocation вызывает сбои в iOS 7

SEL selector = @selector(callback); 
NSMethodSignature *signature = [self methodSignatureForSelector:selector]; 
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 
[invocation setTarget:self]; 
[NSTimer scheduledTimerWithTimeInterval:0.5 invocation:invocation repeats:NO]; 

Когда срабатывает таймер, мое приложение падает со следующей трассировки стека:

enter image description here

Я подумал, что, может быть, одна из переменных больше не сохраняется (даже если документация NSTimer упоминает, что оно сохраняет все ссылочные параметры), поэтому я сильно сохранил все переменные до self. К сожалению, авария сохраняется.

Заранее благодарен!

ответ

2

Вы пропали без вести этой линии [self.invocation setSelector:selector];

Это будет работать

SEL selector = @selector(callback); 
NSMethodSignature *signature = [self methodSignatureForSelector:selector]; 
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 
[invocation setTarget:self]; 
[invocation setSelector:selector]; 
[NSTimer scheduledTimerWithTimeInterval:0.5 invocation:invocation repeats:NO]; 

- (void)callback 
{ 
    NSLog(@"triggered"); 
} 

Выход:

triggered 
+0

Спасибо! Это работает. Я должен был внимательно прочитать документацию. :) –

+0

уверенный ......... :) –

1

This answer, кажется, предлагает вам нужно вызвать setSelector: на вызове в дополнении начать его с подписи.

+0

Добро пожаловать в SO! Обычно это обычная любезность (если это где-то не так), чтобы дать ОП знать, является ли его вопрос дубликат. Ответ, который вы публикуете, должен быть вашим. Таким образом, если ответ, который вы связываете, работает, он может проголосовать за этот ответ, и кредит может пойти к правильному человеку. – CaptJak

+0

Что означает OP? И как я должен ее знать? Комментарий на вопрос? –

+0

OP - это оригинальное сообщение (или плакат). И вы правы, комментарий по этому вопросу. Я не пытаюсь отговорить вас от ответа или даже попросить вас удалить этот ответ. Просто указатель на ответы на вопросы :) – CaptJak