我的应用程序具有一个视图控制器,即使用户自己杀死了该应用程序,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)
但是我不断遇到各种错误。
理想情况下,我想还原每个视图控制器的状态,但是它必须每次都发生。有更好的方法吗?
谢谢,
丹尼尔
持久化视图控制器是不可能的,因为它们携带大量瞬态信息,而很少包含持久性信息。
您可以做的是将表示视图控制器层次结构的配置保存到user defaults
,然后从那里重建。例如,假设您拥有一个带有导航之类的文件系统的选项卡视图,则可以坚持使用这样user defaults
的字符串:bookmarks.folder1.subfolder2.file18.playing.position=19.28
。这可能与正在播放的视频文件相对应,并且达到了应用程序崩溃或被OS终止之前的19.28秒的时间。
通过使用上述模式,您可以将控制器还原到非常接近上一个会话结束之前的状态。最好的部分是,用户甚至不必知道您的应用程序已全部启动,就可以获得与上次浏览该应用程序相同的体验。
当然,恢复取决于应用程序的复杂性级别,并且可能不适用于应用程序中的所有流,但是对于这种情况,您至少可以使用户回到退出前更接近应用程序状态的状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句