【问题标题】:How to tell if iPhone application was launched by backgrounding or not如何判断 iPhone 应用程序是否通过后台启动
【发布时间】:2010-07-14 05:57:09
【问题描述】:

我的应用程序使用 NSUserDefaults 来存储一些值,以便它可以在应用程序更新或后台退出时恢复它们。后台自动保存我的整数值,但如果用户从启动器退出应用程序,数字也会丢失,并且我猜在进入后台时不会调用 ViewDidUnload 方法。有没有一种方法可以在应用程序卸载时保存 NSUserDefaults。此外,ViewDidLoad 方法也有同样的问题,它不会从后台调用。有什么办法解决这个问题?

附:到目前为止,我的应用程序需要保存的唯一数据是用于屏幕计数的 int。

更新:UIApplicationDidEnterBackgroundingNotification 非常适合您的建议!

【问题讨论】:

  • 谢谢大家!我只是很惊讶。我喜欢 Stack Overflow,我从未到过任何其他地方,您可以如此迅速地获得如此多的相关帮助。

标签: iphone objective-c save nsuserdefaults backgrounding


【解决方案1】:

您无法在数据最终被杀死之前立即保存数据,但您可以在 applicationDidEnterBackground: 应用委托中保存“以防万一”状态。

还有 applicationDidBecomeActive:,但没有理由从那里加载您的保存数据,因为当从后台应用程序调用它时,数据将以任何方式保留。

【讨论】:

  • 如果您不想要应用委托中的逻辑,还有一个 DidEnterBackground 通知。
  • 好的,所以你告诉我每次都在 applicationDidEnterBackground: 上调用 NSUserDefaults,然后只从 viewDidLoad 上的默认值更新?天才!
【解决方案2】:

您无法判断您的应用是否是从后台启动的,至少目前是如何设置的,因为如果您的应用委托是从跳板启动的,它将获得相同的事件序列。

正如 Joost 所说,您应该在 applicationDidEnterBackground 回调中保存恢复状态所需的任何内容;本质上,您应该假设这是您的应用在被邪恶的进程收割者无情地杀死之前收到的最后一条消息。

您应该查看WWDC 2010 Session Videos,特别是第 105 节 - 在 iPhone OS 上采用多任务处理,第 1 部分以获得详尽的解释。

【讨论】:

  • 感谢会议视频的建议!我喜欢这些视频,我会去看看 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多