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。