如何在终止应用程序之前保留iPhone应用程序状态?

har*_*alb 11 iphone state uitabbarcontroller

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

它现在工作正常.

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

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

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

谁能告诉我一个直接的方法呢?

Bry*_*nry 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