保存UIViewController并在需要时再次显示

时间:2017-03-11 18:59:25

标签: ios swift uiviewcontroller uinavigationcontroller

我正在尝试创建一个系统,用户可以打开一个UIViewController,关闭ViewController,如果他们意外关闭它,则返回相同的ViewController。 UIViewController填充了来自互联网的数据(经常变化)并且是一个长滚动的UITableView。目前,当用户再次输入相同的UIViewController时,数据将丢失,必须重新下载,并且之前的位置将丢失。

在我的应用的Android版本中,我有一个ViewPager作为主视图,主窗格是左侧片段,打开的窗格是右侧片段。当用户打开相同的“提交”时,不会重新创建片段,并且用户返回到同一屏幕,如果用户单击新提交,则删除旧片段并在其位置加载新片段。这允许状态相同,并且如果用户意外地从窗格中关闭,则用户可以返回。

我认为保留UIViewController的静态版本将是不好的做法并导致内存问题,但我想不出另一种方法来实现它。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您应该阅读Apple关于恢复视图控制器状态的文档:https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PreservingandRestoringState.html

此外,您需要归档和取消归档视图控制器中显示的数据。因此,您可能希望在模型类中实现NSCoding协议。一旦实现了NSCoder,就可以使用NSKeyedArchiver / NSKeyedUnarchiver来保存和恢复视图控制器的状态。在这里阅读NSCoding:https://developer.apple.com/reference/foundation/nscoding

最后,当您的应用即将终止或移至后台时,App Delegate会发出通知。因此,在本课程中,您需要启动保存和恢复应用程序状态的整个过程。在这里阅读UIApplicationDelegate:https://developer.apple.com/reference/uikit/uiapplicationdelegate