Cocoaアプリでタイマを発動させる

日付を登録しておいて、 今日までの日数を計算するアプリを作ってみた。

Cocoa バインディングを使って作ったら、 ほとんどコーディング無しでできてしまったので唖然とする。

それはともかく、 日が変わった時に日付を計算し直すようにしてみた。 起動する時刻にタイマを設定して RunLoop に登録。 そのとき最初に起動した後、 その何秒後毎に起動するかも指定できる。

  tommorowFireTimer = [[NSTimer alloc]
                       initWithFireDate:tommorow
                       interval:86400.0 // 24hrs
                       target:self
                       selector:@selector(calcEventDays:)
                       userInfo:nil
                       repeats:YES];
  NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
  [runLoop addTimer:tommorowFireTimer forMode:NSDefaultRunLoopMode];

で、 とりあえず五分後にタイマが発動するようにしてログを見たところ、 指定した時刻より 0.003 秒くらい前に発動することがわかった。 なかなか正確なんであるが、 これで日付を計算したら一日前の日数になってしまうな。

というわけで、 正時の 1 秒後に発動するように登録することにした。