我正在创建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再加上两秒钟。
我做错了什么?
谢谢!
答案 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];