2012-11-14 45 views
1

我有一個NSTimer和一個NSDate一起工作倒數計時器。然後UILabel隨倒數更新。NSTimer和NSDate倒計時時鐘在模擬器中工作,但不在設備上

我面臨的問題是倒計時時鐘在模擬器中工作,但不在設備上。模擬器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 

我遇到的另一個問題是定時器在用戶離開視圖後不斷更新。

感謝符合任何幫助

+1

什麼[self stringFromTimeInterval]呢?你可以發佈代碼嗎?以及在模擬器和設備中使用了哪些iOS? – meronix

+0

我做了一個編輯。 iOS 6.0在模擬器和設備上。我也發佈了缺少的代碼。謝謝:) – hanumanDev

+0

什麼顯示countdownDate的日誌?它在設備上有效嗎? – 2012-11-14 17:03:45

回答

1

檢查日期變量:

NSDate *date = [dateStringParser dateFromString:deadlineDate]; 

檢查調試器,如果date不爲零。如果是,則問題出現在deadlineDate中,該問題未在dateStringParser中定義的預期格式中(或deadlineDate也爲零)。

+0

如果我在模擬器上的NSLog日期,我得到︰date is 2012-11-15 22:59:59 +0000而在設備上,我得到︰date is(null) – hanumanDev

+0

好吧,所以可能在設備和Mac上的區域設置不一樣。 NSLog截止日期變量,看看你得到了什麼,很可能它不是你期望的格式,或者它是零。 – Alex

1

這些代碼在模擬器和硬件之間的不同行爲方面看起來都不可疑。

如何初始化截止日期?嘗試通過強制啓動定時器的值,以排除這一可能性的問題....

deadlineDate = [NSDate dateWithTimeIntervalSinceNow:3600]; 

還有一些其他方面的改進,你可以對代碼(例如,不知道你有labelFormatter做startTimer方法,可以刪除這些行,持久化日期格式化程序等),但沒有任何解釋模擬器與hw行爲的內容。

相關問題