0

我的应用程序有一个计时器,当应用程序进入后台时会暂停。
为了在应用程序返回前台时仍然有正确的时间,我设置了如下调用NSDateexitDateAppDelegate

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

NSDate调用reentryDate如下:

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

然后我得到两个NSDates 的差异并将它们添加到我的计时器中。

只要应用程序没有在后台终止,这一切都可以正常工作。
如果它确实被终止,则应用程序从第一个 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-applicationWillResignActiveexitDate

有任何想法吗?

4

3 回答 3

0

您可以在共享首选项中保存您的日期或任何数据。即使应用程序在后台关闭,数据也将是持久性的。与您当前的方法相比,肯定会减轻您的痛苦。如果您需要更多解释,请告诉我..:)

于 2014-01-09T17:47:47.003 回答
0

使用 NSDateFormatter 将 NSDate 转换为 NSString 并将此字符串保存在 NSUserDefaults 中的“Did Enter Background”上

在 WillEnterForeground 上获取这个 NSString 并使用相同的 NSDateFormatter 语法将其转换为 NSDate。

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

于 2014-01-09T18:57:51.433 回答
-1

将日期保存到NSUserDefaults. 不要忘记调用该synchronize方法,即使这应该在应用程序后台运行时自动发生,因为您可能会在发生这种情况后稍微添加日期。

于 2014-01-09T17:51:01.657 回答