如果需要,保存 UIViewController 并再次显示

Posted

技术标签:

【中文标题】如果需要,保存 UIViewController 并再次显示【英文标题】:Save UIViewController and display again if needed 【发布时间】:2017-03-11 18:59:25 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您应该阅读有关恢复视图控制器状态的 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

【讨论】:

以上是关于如果需要,保存 UIViewController 并再次显示的主要内容,如果未能解决你的问题,请参考以下文章

从 UICollectionViewCell 访问保存在 UIViewController 中的变量?

子类化 UIView/UIViewController

UIView 需要推送一个 UIViewController(委托)

关闭一个自定义弹出窗口UIViewController并立即显示另一个自定义弹出窗口UIViewController -SWIFT

没有情节提要的 UIViewController 状态恢复不起作用

有条件地切换 UIViewController