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 加上两秒。

我究竟做错了什么?

谢谢!

4

2 回答 2

16

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

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

用于scheduledTimerWithTimeInterval创建在当前运行循环上自动安排的计时器。

PS:使用description方法NSDate总是格林威治标准时间,这可能解释了你的输出。

于 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 回答