我正在为ios5开发一个基于故事板的项目,到目前为止运行良好,但我想在用户退出时保存他们的状态,以便当他们返回应用程序时,我可以将他们跳回故事板中他们离开时的位置。
我的理解是,当你浏览故事板时,它会创建一堆UIViewControllers,这样当你关闭当前控制器时,它就会知道要显示哪一个。但是,如果我在应用程序启动时以编程方式跳到故事板中的一个UIViewController,它就不会有那个历史,那个控制器堆栈,可以回溯。如果没有别的,如果两个控制器在故事板的某个点上变成同一个控制器,它就不知道该回到哪个
处理这个问题的正确方法是什么?我是否只是浏览故事板到用户停止的地方,向每个UIViewController显示设置为"否"的动画,直到我到达用户所在的位置?(如果是这样的话,存储这些信息的最佳方式是什么?有没有任何方法/类可以帮助实现这一点,或者我是否在故事板中滚动自己的存储方式?)
一个选项是使用NSUserDefaults。您无法将UIViewControllers
的确切实例准确地保存在磁盘上,并将其作为内存中的实例进行检索。实际情况是,您应该以某种方式,例如key/value,识别您感兴趣并希望保存其状态的每个viewController。此外,还需要为要保存其状态的每个元素设置关键帧,然后使用NSUserDefaults
进行保存。
对于exmaple,假设您有这样的层次结构:
主页视图>Notes列表>NoteAtIndexPath:x
用户正在查看NoteAtIndexPath:x,并且假设字体大小是动态的,因此用户可以在查看时将其变大或变小。您可以定义两个密钥:IndexOfLastNoteViewed
和LasFontSizeViewed
,并保存它们:
[[NSUserDefaults standardUser] setInteger:5 forKey:IndexOfLastNoteViewed];
[[NSUserDefaults standardUser] setFloat:17.0 forKey:LasFontSizeViewed];
当应用程序再次启动时,您可以检查密钥,并以编程方式浏览到HomeView>ListOfNotes>NoteAtIndexPath:5。
以下是一些可能对您有所帮助的链接:
- 应用程序状态
- 应用程序状态和多任务处理
- 开始IPhone开发:探索IPhone SDK作者:Dave Mark,Jeff LaMarche--应用程序设置和用户默认设置