备忘录模式精选.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
备忘录模式精选

备忘录模式 备忘录模式 - Memento 备忘录模式捕捉并且具象化⼀个对象的内在状态。换句话说,它把你的对象存在了 个地⽅,然后在以后的 个时间再把它恢复出来,⽽不会打破它本⾝的封装性,私有 数据依旧是私有数据。 如何使⽤备忘录模式 在 ViewController.swift ⾥加上下⾯两个⽅法: //MARK: Memento Pattern func saveCurrentState() { // W en t e user leaves t e app and t en comes back again, e // e left it. In order to do t is we need to save t e current // Since its only one piece of information we can use NSUserD NSUserDefaults.standardUserDefaults().setInteger(currentAlbumI } func loadPreviousState() { currentAlbumIndex = NSUserDefaults.standardUserDefaults().inte s owDataForAlbum(currentAlbumIndex) } saveCurrentState 把当前相册的索引值存到 NSUserDefaults ⾥。NSUserDefaults 是 iOS 提供的⼀个标准存储⽅案,⽤于保存应⽤的配置信息 和数据。 loadPreviousState ⽅法加载上次存储的索引值。这并不是备忘录模式的完整实 现,但是已经离⽬标不远了。 接下来在 viewDidLoad 的 scroller.delegate = self 前⾯调⽤: loadPreviousState() 这样在刚初始化的时候就加载了上次存储的状态。但是什么时候存储当前状态呢?这 个时候我们可以⽤通知来做。在应⽤进⼊到后台的时候, iOS 会发送⼀个 UIApplicationDidEnterBackgroundNotification 的通知,我们可以在这个 通知⾥调⽤ saveCurrentState 这个⽅法。是不是很⽅便? 在 viewDidLoad 的最后加上如下代码: NSNotificationCenter.defaultCenter().addObserver(self, selector:s 现在,当应⽤即将进⼊后台的时候,ViewController 会调⽤ saveCurrentState ⽅法⾃动存储当前状态。 当然也别忘了取消监听通知,添加如下代码: deinit { NSNotificationCenter.defaultCenter().removeObserver(self) } 这样就确保在 ViewController 销毁的时候取消监听通知。 这时再运⾏程序,随意移到 个专辑上,然后按下 Home 键把应⽤切换到后台,再在 Xcode 上把 App 关闭。重新启动,会看见上次记录的专辑已经存了下来并成功还原 了: 看起来专辑数据好像是对了,但是上⾯的滚动条似乎出了问题,没有居中啊 ! 这时 initialViewIndex ⽅法就派上⽤场了。由于在委托⾥ (也就是 ViewController ) 还没实现这个⽅法,所以初始化的结果总是第⼀张专辑。 为了修复这个问题,我们可以在 ViewController.swift ⾥添加如下代码: func initialViewIndex(scroller: HorizontalScroller) - Int { return currentAlbumIndex } 现在 HorizontalScroller 可以根据 currentAlbumIndex ⾃动滑到相应的索引 位置了。 再次重复上次的步骤,切到后台,关闭应⽤,重启,⼀切顺利: 回头看看 PersistencyManager 的 init ⽅法,你会发现专辑数据是我们硬编码写 进去的,⽽且每次创建 PersistencyManager 的时候都会再创建⼀次专辑数据。⽽ 实际上⼀个⽐较好的⽅案是只创建⼀次,然后把专辑数据存到本地⽂件⾥。我们如何 把专辑数据存到⽂件⾥呢? ⼀种⽅案是遍历 Album 的属性然后把它们写到⼀个 plist ⽂件⾥,

文档评论(0)

tazhiq2 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档