记忆恢复页面
设计目的
让用户在重新启动app时,进入上次用户浏览的页面,方便用户使用。
下载体验地址:https://itunes.apple.com/cn/app/ping-an-tian-xia-tong/id743484337?l=en&mt=8(平安天下通)。
设计难点
由于记忆恢复功能是所有页面都要具备的功能,在一个成熟的app中,如何尽量少的影响项目的代码以及开发的工作量,是一个必须考虑的前提。
设计思路
- 1.获取到当前页面的数据。
- 2.存储获得到的数据。
- 3.初始化数据,恢复当前页面
获取到当前页面的数据
方式一:
-
- 1.在TXBaseViewController(基类)增加一个属性@property (nonatomic,strong)NSDictionary *params;用于存放页面数据。
- 2.在push页面时,增加params参数,并且赋值
-
弊端
1.每一次push到新页面,需要给params参数赋值。对于已经成熟的项目,需要大量的工作量。
2.对于自定义的init方法,不知道如何给params参数赋值。比如[[SFCBubbleChatController alloc] initWithPAGroupModel:groupModel withType:Message_Normal];
方式二
- 1.在TXBaseViewController增加一个属性@property (nonatomic,strong)NSDictionary *params;用于存放页面数据。
- 2.重写UINavigationController的pushViewController方法
- 3.通过运行时获取下一个controller的所有属性。
- 当然啦,我选择第二种方式,可以省去了大量的工作量。
存储获得到的数据params
- 难点:
- 1.由于params中可能含有对象,所以不可以使用NSUserDefaults存储。
- 2.如何使用归档的方式存储,但是里面包含的对象是不同的, 应该如何存储呢?
我的设计方式
- 1.将需要归档的model继承PABaseModel(基类model)
- 2.让PABaseModel实现NSCopying协议
- 3.通过运行时获得model的属性。如下图的方法在基类中归档。
恢复页面
- 1.重写push方法
- 2.通过kvc的方式给controller的属性一一赋值
这样在用户重新启动app时,默认显示的是我们上一次访问的页面。