【发布时间】:2014-01-10 03:10:36
【问题描述】:
我的应用有一个计时器,当应用进入后台时它会暂停。
为了在应用程序返回前台时仍然有正确的时间,我在AppDelegate 中设置了一个名为exitDate 的NSDate,如下所示:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.exitDate = [[NSDate alloc] init];
}
还有一个名为reentryDate 的NSDate 如下:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
self.reentryDate = [[NSDate alloc] init];
}
然后我得到两个NSDates 的差异并将它们添加到我的计时器中。
只要应用程序没有在后台终止,这一切都可以正常工作。
如果它确实被终止,则应用程序会从 first 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"];
}
问题是我尝试在-applicationWillTerminate、-applicationDidEnterBackground 和-applicationWillResignActive 中设置exitDate,但每次应用程序启动时,exitDate 为零。
有什么想法吗?
【问题讨论】:
标签: ios cocoa-touch nsuserdefaults nstimer state-restoration