记忆恢复页面

设计目的

  让用户在重新启动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张图片
  • 弊端

 

           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的所有属性。
  • 记忆恢复页面_第2张图片
  • 当然啦,我选择第二种方式,可以省去了大量的工作量。

存储获得到的数据params

  • 难点:
  • 1.由于params中可能含有对象,所以不可以使用NSUserDefaults存储。
  • 2.如何使用归档的方式存储,但是里面包含的对象是不同的, 应该如何存储呢?

我的设计方式

  • 1.将需要归档的model继承PABaseModel(基类model)
  • 2.让PABaseModel实现NSCopying协议
  • 3.通过运行时获得model的属性。如下图的方法在基类中归档。
  • 记忆恢复页面_第3张图片

 

恢复页面

  • 1.重写push方法
  • 2.通过kvc的方式给controller的属性一一赋值
  • 记忆恢复页面_第4张图片

这样在用户重新启动app时,默认显示的是我们上一次访问的页面。

 

你可能感兴趣的:(记忆恢复页面)