1

最初に 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];

インデックス 0 と 1 はターゲットとセレクターであるため、引数を設定するときはインデックス 2 から開始するようにドキュメントに記載されています。

次に、タイマーの間隔を決定します。この場合、記事が公開されてから 60 分後にタイマーを呼び出しているので、間隔は60 - timeSincePubDate分単位です。これに 60 を掛けて、タイマーの間隔 (秒) にします。

int timeUntilCheck = (60-timeSincePubDate)*60;

次に、間隔を指定してタイマーを作成し、実行ループに追加します。私はこれをやったことがありませんが、簡単に思えます。本来のメソッドを呼び出さない理由がわかりません。

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

1 に答える 1