NSTimer不会在指定日期被解雇

时间:2012-10-12 13:29:56

标签: objective-c cocoa nsdate nstimer

我正在创建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 个答案:

答案 0 :(得分:16)

必须将使用initWithFireDate创建的时间添加到运行循环中,例如

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

使用scheduledTimerWithTimeInterval创建一个在当前运行循环中自动安排的计时器。

PS:description NSDate方法始终使用GMT,这可能解释了您的输出。

答案 1 :(得分: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];