2014-01-09 3 views
0

У моего приложения есть таймер, который, когда приложение идет в фоновом режиме, приостанавливается.
Чтобы еще в нужное время, когда приложение возвращается на первый план, я установил NSDate под названием exitDate в AppDelegate следующим образом:Установить NSDate, когда приложение идет в фоновом режиме, сохранить и восстановить его с восстановлением состояния

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

и NSDate под названием reentryDate следующим образом:

- (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"]; 
} 

как проблема я попытался установить exitDate в -applicationWillTerminate, -applicationDidEnterBackground и -applicationWillResignActive но каждый раз, когда приложение начинает резервное копирование, exitDate - это нуль.

Любые идеи?

ответ

0

Преобразование NSDate в NSString, используя NSDateFormatter и сохранить эту строку в NSUserDefaults на «вступал фона»

А на WillEnterForeground получить этот NSString и используя тот же синтаксис NSDateFormatter преобразовать его в NSDate.

Или вы можете сохранить в Plist и получить его наоборот.

+0

Привет, это похоже на трюк ... – Chris

+0

Кроме того, я идиот, мой первоначальный метод работает. У меня просто была опечатка в моем decodeObjectForKey. Спасибо вам, ребята! – Chris

0

Вы можете сохранить свою дату или любые данные в общих настройках. Данные будут сохраняться, даже если приложение закрыто в фоновом режиме. Будет определенно снимать с вас много боли по сравнению с вашим текущим методом. Дайте мне знать, если вам нужно больше объяснений .. :)

-1

Сохраните дату до NSUserDefaults. Не забудьте вызвать метод synchronize, даже если это должно произойти автоматически, когда приложение задумано, потому что вы можете добавить к нему дату немного после этого.

+1

Почему downvote? – Gavin

+0

Упс! Неверная кнопка. –

Смежные вопросы