11

我开发了一个带有标签栏和导航控制器的 iPhone 应用程序。

它现在工作正常。

现在我希望应用程序在退出之前保存其状态。

假设我有 6 个选项卡,如果有来电,那么在重新启动应用程序后,我应该会看到最后选择的选项卡。

我已经看到了关于这个主题的几个问题,但看到它们后我更加困惑,

谁能告诉我一个直接的方法来做到这一点?

4

1 回答 1

27

这个问题没有“一刀切”的确切答案——保存应用程序状态的实现很大程度上取决于应用程序的结构,因此任何单一的解决方案都不太可能适合您的具体情况。

然而,有一些一般性的提示和提示,应该会让你走上正确的道路来开发一个好的状态保持解决方案:

  1. 您通常需要执行任何操作以将状态保存applicationWillTerminate:在您的应用程序委托中或通过侦听UIApplicationWillTerminateNotification其他类。

  2. 查看 NSUserDefaults。您可以使用 NSUserDefaults 存储与偏好或其他信息相关的键/值对(类似于 NSDictionary,尽管您只能在 NSUserDefaults 中存储实现 NSCoding 的对象)。使用 NSUserDefaults 存储状态信息。一个警告 - 你不应该使用 NSUserDefaults 来存储大量数据,因为这会减慢你的应用程序的启动时间(因为这些值是在启动时加载的)。

  3. 更具体到您的情况...如果您只想在应用程序之间保留选定的选项卡,您应该实现applicationWillTerminate:并使用 NSUserDefaults 来存储选定的选项卡索引。然后,在您的applicationDidFinishLaunching:实现中,您将检查该 NSUserDefaults 键是否存在,并将 UITabBarController 的选定索引设置为存储的值(如果存在)。

  4. 例如,如果您希望能够恢复所选选项卡的导航堆栈,那么您需要存储足够的信息,以便可以准确地重建导航堆栈。您应该在 NSUserDefaults 中存储哪些信息通常很难量化,因为它高度特定于应用程序的结构以及导航堆栈中视图控制器层次结构的可能迭代。

  5. 如果您需要恢复更通用的导航堆栈,包括可能输入的用户数据,您不希望在应用程序关闭时丢失(例如,如果用户正在创建某种新记录),我建议您将注意力从在应用程序委托级别存储应用程序状态转移到让您的视图控制器类监听UIApplicationWillTerminateNotification并进行自己的特定状态保存。您还必须确定某种机制,以便在终止时使用每个视图控制器保存的信息来恢复导航层次结构。这是一种更复杂的技术,根据您的需要可能不需要。

不幸的是,这个答案有点模糊,尤其是对于更一般和更复杂的情况,因为正如我所指出的,这个问题没有通用的解决方案,因为它在很大程度上取决于您的应用程序结构。

这是使用 NSUserDefaults 的示例:http: //robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847

于 2009-11-28T05:54:01.690 回答