【问题标题】:NSTimer does not fire in next date timeNSTimer 不会在下一个日期时间触发
【发布时间】:2012-06-14 07:15:40
【问题描述】:

我需要根据在日期选择器中选择的时间来触发计时器。 现在,如果选择的时间大于我当前的时间,那么NSTimeInterval 返回正值并且计时器正确触发。

我的问题是当我选择小于当前时间的时间时,NSTimeInterval 返回负值。

所以现在我要做的是 :- 添加秒数,以便它在第二天 24*60*60 时触发。

秒值是正确的,因为当我通过将时间更改为日期来测试它时,它会返回具有所选时间的下一个日期。

我在设置计时器时使用这些秒值。

这是我的代码:

NSTimeInterval value=[[self.pickerView date] timeIntervalSinceDate:[NSDate date]];

        value=value+24*60*60;
        NSLog(@"value =%f",value);


        NSDate *d1 = [NSDate dateWithTimeIntervalSinceNow:value];
        NSLog(@"%@",d1);
        NSDateFormatter *format=[[NSDateFormatter alloc]init];
        [format setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
        NSString *str=[format stringFromDate:d1];
        NSLog(@"str=%@",str);
        [format release];
        NSTimer *t = [[NSTimer alloc] initWithFireDate: d1
                                              interval: 1
                                                target: app
                                              selector:@selector(fireWakeUpTimerMethod:)
                                              userInfo:dict repeats:NO];
      //  app.WakeUPTimer=t;
        NSRunLoop *runner = [NSRunLoop currentRunLoop];
        [runner addTimer:t forMode: NSRunLoopCommonModes];
        [t release];

但是计时器没有被触发。

我这样测试它:-假设我的设备当前时间是 6 月 15 日上午 11:00,然后我在选择器视图中选择上午 10:00 时间,因为上午 10:00 小于上午 11:00,所以时间间隔返回负值所以在这种情况下我做 value=value+(24*60*60);并用这个值设置我的计时器。然后我打开设置应用程序并将我的设备日期和时间更改为 6 月 16 日上午 9:58 并关闭设置应用程序并打开我的应用程序。但是该方法在上午 10:00 没有触发。请告诉我们这是否是测试此场景的正确方法。或者我在测试而不是编码时犯了一些错误。

请帮助我,因为我被困在这里。

提前致谢!

【问题讨论】:

  • 你能发布你对 fireWakeUpTimerMethod: 的实现吗? NSLog 中的日期是否正确?
  • 请描述你是如何测试它的。
  • @tia 我这样测试它:-假设我的设备当前时间是 6 月 15 日上午 11:00,然后我在选择器视图中选择上午 10:00 时间,因为上午 10:00 小于上午 11:00 然后时间间隔返回负值,所以在这种情况下我做 value=value+(24*60*60);并用这个值设置我的计时器。然后我打开设置应用程序并将我的设备日期和时间更改为 6 月 16 日上午 9:58 并关闭设置应用程序并打开我的应用程序。但是该方法在上午 10:00 没有触发。请告诉我们这是否是测试此场景的正确方法。请帮助。
  • @Pfitz 我正在用这种方法播放歌曲。但问题是该方法没有被调用。
  • @tia 请看一下,如果错误在测试中,请告诉我。我是 iphone 编程的新手。

标签: iphone objective-c ios nstimer


【解决方案1】:

我假设你得到了正确的价值

 value=value+(24*60*60);

同时检查NSTimer的目标及其选择器

【讨论】:

  • 我在值中添加了括号来计算正确的值,因为你错过了计算值
  • 问题不在于值,只是计时器没有被触发。
  • 你用过的目标应用是什么?
  • appDelegate 的对象,因为应该触发的方法在 appDelegate 中。
猜你喜欢
  • 2015-03-15
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多