【问题标题】:NSTimer doesn't get fired at specified dateNSTimer 不会在指定日期被解雇
【发布时间】:2012-10-12 13:29:56
【问题描述】:

我正在创建一个 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 加上两秒。

我做错了什么?

谢谢!

【问题讨论】:

  • [NSDate date][NSDate dateWithTimeIntervalSinceNow:2.0f] 的显示效果如何? (我想知道问题是“现在”还是时间间隔。)
  • [NSDate 日期] 是:2012-10-12 13:19:02 +0000 和 [NSDate dateWithTimeIntervalSinceNow:2.0f] 是:2012-10-12 13:21:02 +0000 :(

标签: objective-c cocoa nsdate nstimer


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    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];
    

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2016-04-05
      相关资源
      最近更新 更多