复杂应用程序的IOS保存状态

| 我正在iPad IOS 4.2:4个选项卡上构建一个相当复杂的业务应用程序,每个选项卡上都有可能很深的导航路径。 在您一些经验丰富的IOS开发人员看来,对于在两次启动之间(即在应用程序完全终止并随后重新启动之后)保存应用程序状态,用户的一般期望是什么?我正在使用Core Data,并涵盖了所有数据问题,但我担心应用程序的导航树。如果用户在屏幕3上离开了第一个标签,在屏幕4上离开了第二个标签,在屏幕2上离开了第三个标签,那么在此应用中,他进入了一个新记录的一半完成状态,并且在应用进入背景时,在屏幕3的第4个选项卡上工作...您是否认为普通用户希望该应用程序在下次启动时记住所有内容? (我的直觉说是,尽管我不确定要持续多长时间。) 如果答案是肯定的,那么您是否可以提出一种处理该问题的一般策略(再次,我在这里谈论的是导航树,而不是核心数据)?例如,如果将导航控制器用作每个选项卡的根视图控制器,那么足够简单地记录有关其导航堆栈的足够信息,以便以后可以还原它们。但是,弹出窗口,警报/操作表或动态创建的模式VC之类的东西呢?每个视图控制器是否应该记录其UI对象的状态,如果这样,建议采用什么方法? 我知道很多事情要取决于用户,但是我想对这些问题有一个普遍的看法,即经验的声音。     
已邀请:
        从原理上讲,这很简单,但是在实践中,要遍历导航层次结构并存储无法从数据模型派生的内容,可能会变得非常复杂。 有一个名为DTResurectionKit的开源实现。我还在网站上的应用程序中记录了我的操作方法。它类似于(但比DTResurectionKit简单)。     
           在您一些经验丰富的IOS开发人员看来,对于在两次启动之间保存应用程序状态,用户的一般期望是什么? 考虑这一点的最佳方法是确保用户永远不必弄清楚应用程序首次打开时到达其位置的原因或方式。 这完全取决于您拥有的应用程序类型以及自上次打开以来的时间长度。听起来您有一个相当复杂的向下钻取应用程序,所以我认为最好是在预定的时间范围内记住导航堆栈。我使用three20框架,该框架会自动为我执行此操作,但是如果要实现它,它将是这样的: 如果用户在过去24小时内开放,请打开剩下的确切位置 如果用户在一周内打开,请打开他们所在的应用程序的主“部分”或区域 如果用户在一周过去之后打开,请打开到根屏幕。 当然,现在这些值将根据您的应用程序功能和用例而有所不同,但是您明白了。通过对人们如何使用您的应用程序以及何时使用做出广泛的假设,可以在用户不记得他们如何到达那里时,不要将他们深入应用程序中来增加用户体验。 至于实现,它们全都是数据。您不需要序列化活动对象来存储堆栈,只需实现在下次启动时重新创建状态所需的数据。您需要存储的内容高度取决于您自己的设置...里程会有所不同。我使用
NSUserDefaults
通过Three20存储所有实例变量和导航堆栈。查看TTNavigator以获得出色的实现。     
我建议保持每个选项卡视图的状态。仅在“页面”级别。不必担心弹出窗口或数据输入不完整的情况(希望将过渡状态保存到核心数据存储之前不会有太多过渡状态)。 就像您说的那样,记住每个选项卡上的选项卡以及导航到的控制器很容易。不需要更多。 听起来好像您已经掌握了它,但是为了他人的利益:1)更改选项卡时,保存“活动选项卡”,2)在选项卡中导航时,将“活动控制器”保存在选项卡中\“,3)启动应用程序时,设置\”活动标签\“,4)更改标签时,设置/确认\”标签中的活动控制器\“。 4)的原因是选项卡的视图/控制器在加载时将被延迟,或者可能永远不会加载。您不想为不可见的选项卡设置“选项卡中的活动控制器”,该选项卡可能永远不会加载到应用程序中,只会导致不必要的加载。在加载应用程序之后,由于它已经处于正确的状态,因此经常不需要更改它。     
        我认为您的时间最好花在其他地方。当然,您的应用程序可能非常适合此操作,但是在我们的情况下,数据部分处于联机状态,可能已过时,同时影响不同选项卡中不同导航视图中的视图状态等。这不是一个不可克服的挑战,但肯定很辛苦,而且耗时很多。 我们决定将时间花费在修复错误和改进功能上。如果您必须做出相同的选择,我很确定您的用户会喜欢哪种选择。特别是现在,您的应用程序将在后台通话中幸免于难。     

要回复问题请先登录注册