繁体   English   中英

NSTimer 和 NSDate 倒计时时钟在模拟器中工作,但不在设备上

[英]NSTimer and NSDate countdown clock works in the simulator but doesn't on the device

我有一个 NSTimer 和一个 NSDate 一起工作来制作一个倒计时时钟。 然后使用倒计时更新 UILabel。

我面临的问题是倒计时时钟在模拟器中工作,但不在设备上。 模拟器 iOS 6.0 和设备 iOS 6.0.1。

这是我的代码:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];

    [self startTimer];

}

 // timer and update label to display a countdown clock 
- (void)startTimer {

    // Create a timer that fires every second repeatedly and save it in an ivar
    NSTimer *timer = [[NSTimer alloc] init];

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES];

}

  - (void)updateLabel {

    // convert date string to date then set to a label
    NSDateFormatter *dateStringParser = [[NSDateFormatter alloc] init];
    [dateStringParser setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.000Z"];

    NSDate *date = [dateStringParser dateFromString:deadlineDate];

    NSLog(@"date from update label %@", date);

    NSTimeInterval timeInterval = [date timeIntervalSinceNow]; ///< Assuming this is in the future for now.

    NSString *stringVariable = [self stringFromTimeInterval:timeInterval];

    self.deadlineLbl.text = [NSString stringWithFormat:@"%@", stringVariable];

    NSLog(@"%@",stringVariable);

}

- (NSString *)stringFromTimeInterval:(NSTimeInterval)interval {
    NSInteger ti = (NSInteger)interval;
  //  NSInteger seconds = ti % 60;
    NSInteger minutes = (ti / 60) % 60;
    NSInteger hours = (ti / 3600);
    return [NSString stringWithFormat:@"%02i hours : %02i min", hours, minutes];
}

这是首先在模拟器上然后在设备上的一些控制台输出:

模拟器控制台输出:

2012-11-14 15:39:57.021 appName[7856:13d03] 31 hours : 20 min
2012-11-14 15:39:58.020 appName[7856:13d03] 31 hours : 20 min
2012-11-14 15:39:59.021 appName[7856:13d03] 31 hours : 19 min
2012-11-14 15:40:00.021 appName[7856:13d03] 31 hours : 19 min

设备控制台输出:

2012-11-14 15:45:44.887 appName[7556:907] 00 hours : 00 min
2012-11-14 15:45:45.896 appName[7556:907] 00 hours : 00 min
2012-11-14 15:45:46.891 appName[7556:907] 00 hours : 00 min
2012-11-14 15:45:47.891 appName[7556:907] 00 hours : 00 min

我遇到的另一个问题是计时器在用户离开视图后不断更新。

谢谢你的帮助

检查行中的日期变量:

NSDate *date = [dateStringParser dateFromString:deadlineDate];

如果date不为零,请检查调试器。 如果是,那么问题出在deadlineDate ,它不是dateStringParser定义的预期格式(或者deadlineDate也是nil)。

就模拟器和硬件之间的不同行为而言,这些代码都没有可疑之处。

你如何初始化deadlineDate? 尝试通过在启动计时器中强制设置一个值来排除这个问题....

deadlineDate = [NSDate dateWithTimeIntervalSinceNow:3600];

您还可以对代码进行一些其他改进(例如,不确定您在 startTimer 方法中使用 labelFormatter 做什么,可以删除这些行,保留日期格式化程序等),但没有什么可以解释模拟器与硬件行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM