2013-07-12 1 views
1

Сначала я создаю NSInvocation, потому что метод, который я хочу, чтобы позвонить с таймером имеет несколько параметров, которые я установил здесьNSTimer и NSInvocation, таймер не срабатывает

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(addStockPriceForArticle:forInterval:)]]; 
[invocation setArgument:&varArticle atIndex:2]; 
NSNumber *interval = [NSNumber numberWithInt:60]; 
[invocation setArgument:&interval atIndex:3]; 

В документации сказано, чтобы начать с индексом 2 при настройке аргументов, поскольку индексы 0 и 1 являются целевыми и селекторными.

Затем я выясню интервал, в котором я хочу, чтобы таймер был. В этом случае я вызываю таймер через 60 минут после публикации статьи, поэтому интервал 60 - timeSincePubDate за считанные минуты, который я умножаю на 60, чтобы быть интервалом в секундах для таймера.

int timeUntilCheck = (60-timeSincePubDate)*60; 

Затем я создаю таймер с интервалом и добавляю его в цикл запуска. Я никогда не делал этого раньше, но это кажется достаточно простым; Я не уверен, почему он никогда не называет метод, который он должен использовать.

[[NSRunLoop currentRunLoop] addTimer:[NSTimer timerWithTimeInterval:timeUntilCheck invocation:invocation repeats:NO] 
            forMode:NSDefaultRunLoopMode]; 
+0

Вы делаете это в главном потоке? –

+0

Xcode сообщает мне, что это делается в потоке 5, com.apple.root.default-priority. Я предполагаю, что это происходит потому, что это происходит в ответ на асинхронный запрос HTML для RSS-канала – Regan

ответ

1

Вам нужно добавить таймер цикла выполнения, что а) существует и б) работает, или он никогда не будет стрелять, и вы, вероятно, хотите, чтобы ваш обратный вызов произойдет в основном потоке в любом случае.

Добавить таймер цикла выполнения основного потока, как это:

[[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:timeUntilCheck invocation:invocation repeats:NO] 
          forMode:NSDefaultRunLoopMode]; 

 Смежные вопросы

  • Нет связанных вопросов^_^