4

私はNSTimerを作成しています:

    NSTimer *saveProgressSizeTimer = [[NSTimer alloc]
    initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:2.0f]
    interval:1.0f
    target:self
    selector:@selector(myMethod:)
    userInfo:myUserInfo
    repeats:YES];

ただし、タイマーは起動しません。メソッドは呼び出されません。日付を印刷すると、次のようになります。

2012-10-12 15:19:02.786 MyApp[1768:303] 発火日: 2012-10-12 13:21:02 +0000

「2012-10-12 15:21:02」ではないでしょうか?なんとなく時間がずれています。しかし、なぜ?タイム ゾーンを UTC/GMT +1 時間 (私はドイツにいます) から別の時間に変更しても、日付は 2012-10-12 13:19:02 プラス 2 秒のままです。

私は何を間違っていますか?

ありがとう!

4

2 に答える 2

16

で作成された時間はinitWithFireDate、実行ループに追加する必要があります。

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

scheduledTimerWithTimeInterval現在の実行ループで自動的にスケジュールされるタイマーを作成するために使用します。

PS:descriptionメソッドNSDateは常に GMT を使用します。これはおそらく出力を説明しています。

于 2012-10-12T13:48:39.243 に答える
1

addTimer次のようにタイマーを作成する場合:

NSTimer *saveProgressSizeTimer = [[NSTimer alloc]
    initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:2.0f]
    interval:1.0f
    target:self
    selector:@selector(myMethod:)
    userInfo:myUserInfo
    repeats:YES];

次のように RunLoop にタイマーを追加する必要があります。

[[NSRunLoop currentRunLoop] addTimer:saveProgressSizeTimer forMode:NSDefaultRunLoopMode];
于 2012-10-12T13:56:22.353 に答える