Сначала я создаю 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];
Вы делаете это в главном потоке? –
Xcode сообщает мне, что это делается в потоке 5, com.apple.root.default-priority. Я предполагаю, что это происходит потому, что это происходит в ответ на асинхронный запрос HTML для RSS-канала – Regan