【问题标题】:Set NSDate when app goes in background, save and restore it with state restoration当应用程序进入后台时设置 NSDate,通过状态恢复保存和恢复它
【发布时间】:2014-01-10 03:10:36
【问题描述】:

我的应用有一个计时器,当应用进入后台时它会暂停。
为了在应用程序返回前台时仍然有正确的时间,我在AppDelegate 中设置了一个名为exitDateNSDate,如下所示:

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

还有一个名为reentryDateNSDate 如下:

- (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


    【解决方案1】:

    使用 NSDateFormatter 将 NSDate 转换为 NSString 并将此字符串保存在 NSUserDefaults on 'Did Enter Background'

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

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

    【讨论】:

    • 另外,我是个白痴,我的初始方法也有效。我只是在我的 decodeObjectForKey 中有一个错字。谢谢你们!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 哎呀!按钮错误。
      猜你喜欢
      • 2013-02-24
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多