首先我创建一个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 :(得分:1)
您需要将计时器添加到a)存在且b)正在运行的运行循环中,或者它永远不会触发,并且您可能希望您的回调始终在主线程上发生。
将计时器添加到主线程的运行循环中,如下所示:
[[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:timeUntilCheck invocation:invocation repeats:NO]
forMode:NSDefaultRunLoopMode];