博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 恢复现场
阅读量:6261 次
发布时间:2019-06-22

本文共 1420 字,大约阅读时间需要 4 分钟。

恢复现场的涵义是当前app在A页面被系统杀死后,下次进入app仍然进入页面A。


实现思路:

这个操作有三个关键的步骤:

  1. 获取当前视图,保存视图必须要的属性。
  2. 将上述内容在必要的时保存在本地以及删除。
  3. 在进入app时读取内容,生成视图并为之赋值。
问题1,如何获得当前视图以及其对应必要属性
  • 获得当前视图 我的方案是给appdelegate写了一个方法用于使用,代码如下:

    - (UIViewController *)getVisableVC{      UIViewController * vc = self.window.rootViewController;      while ([vc isKindOfClass:[UITabBarController class]]) {        vc = ((UITabBarController *)vc).selectedViewController;    }    while ([vc isKindOfClass:[UINavigationController class]]) {        vc = ((UINavigationController *)vc).visibleViewController;    }    while (vc.presentedViewController) {        vc = vc.presentedViewController;    }    return vc;}复制代码
  • 获得当前视图的必要属性**(注意这里需要存储额外的类名,便于后续生成实例)** 我的方案是给UIViewController添加了一个类方法用于实现,返回必要的属性名(然后利用kvc)。实际使用如下:

    #pragma mark 恢复现场+ (NSArray *)restoreSceneKey{  return @[@"comic_id",@"comicName"];}复制代码
问题2,何时存储或者删除本地内容
  • 何时触发存储操作

    思路1:在系统杀死程序时存储——Pass(我们无法在程序被系统杀死获得消息) 思路2:在系统进入后台时存储内容——winner(迂回路线,实现需求)

  • 何时触发删除操作

    1. 在进入app得去本地内容跳转到需要恢复的视图后删除
    2. 配合思路二,在得到程序被认为杀死的消息时删除

    PS:至于存储方式,我采用的是plist本地文件存储

问题3,进入app时生成视图并为之赋值
  • 生成视图 利用解决问题1时存下的类名生成对应的实例。

  • 为之赋值

    1. 利用kvc为之赋值
    2. 利用runtime为之赋值

    在demo中我采用的是利用runtime为之赋值,kvc的方式没有实践过,此处就留个读者自己拓展实现了

Demo

在Demo中我采用的存储方式是plist文件形式存储,为视图赋值采用的是runtime形式,并在其中添加了健壮性检测,防止本地文件被修改后导致的错误

遭遇的坑

  • 思考过不需要视图实现任何方法,直接用运行时得到所有属性存储起来,但是由于无法区分属性的私有的还是公开的,如果取属性会把所有的包括UIView,layer等展示属性也给存起来,所以作罢
  • 使用过让视图传必要属性的以及其对应的值回来,但是Demo中健壮性检测不太方便做,而且实现层面需要多写代码,不合算。仔细考虑了一下kvc就只需要key在用kvc取value就可以了

转载地址:http://hykpa.baihongyu.com/

你可能感兴趣的文章
k8s第一个实例创建redis集群服务
查看>>
Postgresql 查看建表语句 命令
查看>>
git操作
查看>>
技术文档翻译-------glove readme(1)
查看>>
编码格式
查看>>
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
查看>>
poj 2828【线段树 单点更新】
查看>>
java构建二叉树和二叉树的遍历
查看>>
svn+jenkins+docker 发布 java 项目(maven)
查看>>
一步一步学NUnit(1)
查看>>
android开发
查看>>
1027 方程组的根
查看>>
菜鸟网络股权分配:阿里巴巴占51%的股份
查看>>
《Pro SQL Server Internals》部分翻译(P36-P45)
查看>>
菜鸟nginx源代码剖析数据结构篇(十) 自旋锁ngx_spinlock
查看>>
广州高清卫星地图 用百度卫星地图server下载 含标签、道路数据叠加 可商用
查看>>
mysql手记
查看>>
JAVA 不同类载入器命名空间的理解
查看>>
数据库恢复之丢失联机重做日志文件的恢复
查看>>
C#发邮件
查看>>