Ios 每次恢复状态?
我的应用程序有一个视图控制器,即使用户自己杀死了该应用程序,它也必须被还原,而Ios 每次恢复状态?,ios,swift,appdelegate,state-restoration,Ios,Swift,Appdelegate,State Restoration,我的应用程序有一个视图控制器,即使用户自己杀死了该应用程序,它也必须被还原,而shouldRestoreApplicationState不会这样做;如果用户杀死了应用程序,我会回到第一个控制器 那么,有没有办法做到我想要的,每次都恢复状态 如果状态恢复无法做到这一点,我想也许我可以将视图控制器保存到持久性存储中,并从appDelegate中显示它,但我还没有弄清楚这一点。我必须从appDelegate重建整个导航堆栈,包括一个选项卡栏控制器和多个导航控制器,直到该视图。这是个好主意吗?我该怎么做
shouldRestoreApplicationState
不会这样做;如果用户杀死了应用程序,我会回到第一个控制器
那么,有没有办法做到我想要的,每次都恢复状态
如果状态恢复无法做到这一点,我想也许我可以将视图控制器保存到持久性存储中,并从appDelegate中显示它,但我还没有弄清楚这一点。我必须从appDelegate重建整个导航堆栈,包括一个选项卡栏控制器和多个导航控制器,直到该视图。这是个好主意吗?我该怎么做呢
我尝试过这种变化:
let bookInfoStoryboard = UIStoryboard(name: "BookInfo", bundle: nil)
let controller = bookInfoStoryboard
.instantiateViewControllerWithIdentifier("bookInfoTableViewController")
self.window?.makeKeyAndVisible()
self.window?.rootViewController!.presentViewController(controller, animated: true, completion: nil)
但我不断地犯各种错误
理想情况下,我希望恢复每个视图控制器的状态,但每次都必须恢复。有更好的方法吗
谢谢
丹尼尔反对这种标准行为可能是个坏主意。如果你的应用程序中有一个bug,并且它一直在恢复坏状态并陷入困境,那么这种行为就是存在的
如果你真的想这样做,你不能使用UIKit的状态恢复系统,所以你必须建立自己的系统。在iOS 6中添加UIKit功能之前,这种情况非常普遍。是实现诸如系统的良好起点。持久化视图控制器是不可能的,因为它们携带大量的瞬时信息,而持久化信息很少 您可以做的是将表示视图控制器层次结构的配置保存到
用户默认值
,然后从中重建。例如,假设您有一个带有类似文件系统导航的选项卡视图,您可以将如下字符串保持为用户默认值
:bookmarks.folder1.subfolder2.file18.playing.position=19.28
。这可能对应于正在播放的视频文件,在应用程序崩溃或被操作系统终止之前达到19.28秒
通过使用类似上面的模式,您可以将控制器恢复到非常接近上次会话结束前的状态。最棒的是,用户甚至不必知道应用程序从头开始,他将获得与上次浏览应用程序时相同的体验
当然,恢复取决于应用程序的复杂程度,可能不适用于应用程序中的所有流,但是在这种情况下,您至少可以将用户恢复到更接近退出前的应用程序状态。请注意,
UINavigationController
有一个可以设置的属性。如果您将您的rootViewController
设置为UINavigationController
,然后重新创建视图控制器链,您可以一次将它们全部设置,最后一个是可见的。我倾向于同意您的看法,但在这种情况下,我需要一个计时器来保持运行,如果它在用户背后停止,应用程序将非常无用。不过,我会尽量把它控制在最低限度。谢谢诡计决定。我把它看作是用户明确停止你的应用程序,所以我可能希望计时器停止。我对应用程序连环杀手没有什么同情心。这在你的应用程序中可能没有意义,但值得考虑的是,如果你总是可以保存计时器(即用户数据),但在发生杀戮时却会丢失UI状态。是的,我正试图在尽可能少地保存而不破坏功能之间找到一个最佳点。不过你确实说服我不要做得太过分了。我在想,“既然我得自己保存东西,我还是一路走吧。”。所以,谢谢