2014-01-09 44 views
0

我的應用程序有一個計時器,當應用程序在後臺進入暫停。
仍然有正確的時間,當應用程序回來在前臺,我設置一個NSDateAppDelegate稱爲exitDate如下:設置應用程序在後臺進行NSDate,保存並恢復狀態恢復

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    self.exitDate = [[NSDate alloc] init]; 
} 

,並呼籲reentryDate一個NSDate如下:

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    self.reentryDate = [[NSDate alloc] init]; 
} 

然後我得到兩個NSDate s的區別,並將它們添加到我的計時器中。

只要應用沒有在後臺終止,這一切都可以正常工作。
如果它終止了應用程序從開始viewController並且計時器已停止。

要解決這個問題我使用狀態恢復。這也很好。
即使應用程序終止,應用程序將從最後viewController開始,並提前保存的所有內容。

即使我明確要求這樣做,唯一似乎無法在狀態恢復中保存的東西是我的exitDate

當應用程序返回時,exitDate總是等於零。

我認爲它有事情做與exitDate被設定的時間,這可能是方法後如下叫:

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    [coder encodeObject:self.exitDate forKey:@"UnsavedExitDateAppDelegate"]; 
} 

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    self.exitDate = [coder decodeObjectForKey:@"UnsavedExitDateAppDelegate"]; 
} 

問題是我已經試過在-applicationWillTerminate-applicationDidEnterBackground-applicationWillResignActive設置exitDate但每次當應用程序啓動時,exitDate是零。

任何想法?

回答

0

使用NSDateFormatter轉換的NSDate到的NSString並保存此字符串NSUserDefaults的中上「沒有輸入背景」

而且在WillEnterForeground得到這個的NSString和使用NSDateFormatter語法,將其轉換爲NSDate的。

或者您可以保存在Plist中,反之亦然。

+0

乾杯,這似乎是伎倆...... – Chris

+0

另外,我是一個白癡,我的初始方法也適用。我在我的decodeObjectForKey中有一個錯字。感謝你們! – Chris

0

您可以在共享偏好設置中保存日期或任何數據。即使應用程序在後臺關閉,數據仍然是持久性的。與你目前的方法相比,肯定會帶走很多痛苦。讓我知道如果你需要更多的解釋.. :)

-1

保存日期爲NSUserDefaults。不要忘記調用synchronize方法,即使這是在應用程序背景時自動發生的,因爲在發生此情況後可能會稍微添加日期。

+1

爲什麼downvote? – Gavin

+0

哎呀!錯的按鈕。 –