ios - 每次都恢复状态?

标签 ios swift appdelegate state-restoration

我的应用程序有一个 View Controller ,即使用户自己终止了该应用程序,它也必须恢复,而 shouldRestoreApplicationState 不会这样做;如果用户终止了应用程序,我会返回到第一个 Controller 。

那么有没有办法做我想做的,每次都恢复状态?

如果状态恢复不可能做到这一点,我想也许我可以将 View Controller 保存到我的持久存储中并从我的 appDelegate 中呈现它,但我还无法弄清楚。我必须从 appDelegate 重建整个导航堆栈,包括选项卡栏 Controller 和到该 View 的多个导航 Controller 。这是一个好主意吗?我应该怎么做?

我试过这个的变体:

        let bookInfoStoryboard = UIStoryboard(name: "BookInfo", bundle: nil)
        let controller = bookInfoStoryboard
            .instantiateViewControllerWithIdentifier("bookInfoTableViewController")
        self.window?.makeKeyAndVisible()
        self.window?.rootViewController!.presentViewController(controller, animated: true, completion: nil)

但我不断收到各种错误。

理想情况下,我想恢复每个 View Controller 的状态,但它必须每次都发生。有更好的方法吗?

谢谢,

丹尼尔

最佳答案

持久化 View Controller 是不可能的,因为它们携带大量 transient 信息而持久化信息很少。

您可以做的是将表示 View Controller 层次结构的配置保存到 user defaults,然后从那里重建。例如,假设您有一个带有导航等文件系统的选项卡 View ,您可以将 user defaults 持久化为这样的字符串:bookmarks.folder1.subfolder2.file18.playing.position=19.28。这可能对应于正在播放的视频文件,在应用程序崩溃或被操作系统终止之前达到 19.28 秒。

通过使用像上面那样的模式,您可以将 Controller 恢复到非常接近上次 session 结束前的状态。最棒的是,用户甚至不必知道您的应用程序已重新启动,他将获得与上次浏览该应用程序时相同的体验。

当然,恢复取决于应用程序的复杂程度,并且可能不适用于应用程序内的所有流程,但是对于这种情况,您至少可以让用户回到更接近退出前的应用程序状态。

关于ios - 每次都恢复状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600222/

相关文章:

iphone - 如何在 ios 中将 sendSynchronousRequest 更改为 sendASynchronousRequest?

Swift 崩溃从地址簿中提取记录值

ios - 如何从 AppDelegate 呈现场景?

ios - 如何在Xcode 4中支持自定义完成字典

ios - 为什么纹理数据无法显示?

ios - 触摸已移动 : How to know when the touch ended?

swift - react 性 Cocoa MVVM 初始化

ios - 如何引用 AppDelegate.swift 中的方法?

ios - 提示对运动与健身数据的许可

ios - 如果用户点击 UIImageView 之外的任何点,则删除 UIImageView