IOS中存储应用当前状态

本文详细介绍了在iOS中如何实现应用状态的保存和恢复,包括设置restoration ID、编码解码视图状态,以及处理没有直接关联UI的数据。通过实例演示了Tab模板工程中,从第一个到第三个视图控制器的状态保存过程,确保用户在退出应用后能够恢复到离开时的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IOS中保存当前状态的实现步骤:
     1)用于询问应用应用是否需要保存状态的两个方法:
     - (BOOL)application: (UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
     - (BOOL)application: (UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
    
     2)   给每个需要保存状态的viewController设置restoration ID,如果有某个子view需要保存状态,则它所有的父的viewController和view都必须设置restoration ID

     3)要存储额外的与viewController相关的信息必须在对应的view中实现如下的方法
     - (void)encodeRestorableStateWithCoder: (NSCoder *) coder
     - (void)decodeRestorableStateWithCoder: (NSCoder *) coder

     4)存储一些没有直接与user interface相关的数据,在app delegate中实现代理方法
     application:willEncodeRestorableStateWithCoder:
     application:didEncodeRestorableStateWithCoder;

实例解析:

1)打开xcode创建创建一个tab模板的工程。在AppDelegate中编写如下方法(允许存储应用的当前状态)


2)给tabviewController和firstViewController以及secondViewController设置restoration ID
3)点击变异,run测试,点击显示第二个tab页面,退出,再打开,这次直接进入secondView
4)实现数据回复。首先修改secondViewController,给这个view天剑textField控件和button控件。将这两个控件拖入对应的secondViewController代码中生成属性。在这个secondViewController中实现方法:

这样再运行应用,文本框中修改的内容也可以在推出之后保存。
5)继续修改secondViewController,给secondViewController天剑navgationViewController。给button添加对应的方法displayVC3。新建coca 类使他成为UIViewController的子类命名为ThirdViewController(在创建过程中需要选中同时创建xib文件,这样就会创建一个对应的view文件)。给secondViewController设置属性:

在这个viewController中的viewDidLoad方法中设置并初始化这个属性


然后实现之前创建的button的click时间方法(这个方法等同于navigation中国的performfetch方法):

调用上述方法,即开始nav的堆栈调用。

之后在创建的ThirdViewController文件中的viewDidLoad方法中设置restoration ID,以及对应的restoration class。


同时因为这个thirdViewController并不是在storybord中画出来的,所以必须实现restoration 对应的协议 UIViewControllerRestoration协议,并且实现对应的方法(在这个方法中,主要作用就是在返回该应用是,在这里可以自动创建一个对应的viewController)。


这样点击run之后,进入secondView中当点击button实现展示thirdView。然后将应用推出,再重新进入,则会直接展示The ThirdView。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值