每次都恢复状态?
Restore state every single time?
我的应用程序有一个视图控制器,即使用户自己终止了该应用程序也必须恢复该视图控制器,而 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)
但我不断收到各种错误。
理想情况下,我想恢复每个视图控制器的状态,但它必须每次都发生。有更好的方法吗?
谢谢,
丹尼尔
反对这样的标准行为可能不是一个好主意。如果您的应用程序中存在错误并且它不断恢复错误状态并卡住,就会出现这种行为。
如果你真的想这样做,你不能使用 UIKit 的状态恢复系统,所以你必须建立自己的。在 iOS 6 中添加 UIKit 功能之前,这曾经很常见。 是实现此类系统的良好起点。
持久化视图控制器是不可能的,因为它们携带大量瞬态信息而持久化信息很少。
您可以做的是将表示视图控制器层次结构的配置保存到 user defaults
,然后从那里重建。例如,假设您有一个带有文件系统(如导航)的选项卡视图,您可以坚持 user defaults
这样的字符串:bookmarks.folder1.subfolder2.file18.playing.position=19.28
。这可能对应于正在播放的视频文件,在应用程序崩溃或被 OS.
终止之前达到 19.28 秒
通过使用像上面那样的模式,您可以将控制器恢复到非常接近上次会话结束前的状态。最好的部分是,用户甚至不必知道您的应用程序已重新启动,他将获得与上次浏览该应用程序时相同的体验。
当然,恢复取决于应用程序的复杂程度,可能不适用于应用程序内的所有流程,但是对于这种情况,您至少可以让用户回到更接近之前状态的应用程序状态退出。
我的应用程序有一个视图控制器,即使用户自己终止了该应用程序也必须恢复该视图控制器,而 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)
但我不断收到各种错误。
理想情况下,我想恢复每个视图控制器的状态,但它必须每次都发生。有更好的方法吗?
谢谢,
丹尼尔
反对这样的标准行为可能不是一个好主意。如果您的应用程序中存在错误并且它不断恢复错误状态并卡住,就会出现这种行为。
如果你真的想这样做,你不能使用 UIKit 的状态恢复系统,所以你必须建立自己的。在 iOS 6 中添加 UIKit 功能之前,这曾经很常见。
持久化视图控制器是不可能的,因为它们携带大量瞬态信息而持久化信息很少。
您可以做的是将表示视图控制器层次结构的配置保存到 user defaults
,然后从那里重建。例如,假设您有一个带有文件系统(如导航)的选项卡视图,您可以坚持 user defaults
这样的字符串:bookmarks.folder1.subfolder2.file18.playing.position=19.28
。这可能对应于正在播放的视频文件,在应用程序崩溃或被 OS.
通过使用像上面那样的模式,您可以将控制器恢复到非常接近上次会话结束前的状态。最好的部分是,用户甚至不必知道您的应用程序已重新启动,他将获得与上次浏览该应用程序时相同的体验。
当然,恢复取决于应用程序的复杂程度,可能不适用于应用程序内的所有流程,但是对于这种情况,您至少可以让用户回到更接近之前状态的应用程序状态退出。