Сначала я создаю 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];