我的应用程序有一个计时器,当应用程序进入后台时会暂停。
为了在应用程序返回前台时仍然有正确的时间,我设置了如下调用NSDate
:exitDate
AppDelegate
- (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
总是等于 nil。
我认为它与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
有任何想法吗?