- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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 ⽂件⾥,
您可能关注的文档
- 基于寻路行为的地下商业街空间设计初探精选.pdf
- 基于模糊物元和墒权迭代理论的水库兴利调度综合评价方法精选.pdf
- 基于汽车企业BOM+系统实施方案的探讨精选.pdf
- 基于混合高斯模型的非固定握持姿势手势识别精选.pdf
- 基于混沌神经网络的盲检测改进新算法精选.pdf
- 基于温湿度传感器物联网应用实时 数据处理系统开发(个人版 3)精选.doc
- 基于温湿度传感器物联网应用实时 数据处理系统开发(个人版 4)精选.doc
- 基于温湿度传感器物联网应用实时 数据处理系统开发(个人版 5)精选.doc
- 基于沉积相反演的砂砾岩体沉积期次精细划分与_省略__以东营凹陷盐家地区古近系沙四精选.pdf
- 基于温湿度传感器物联网应用实时 数据处理系统开发(个人版1)精选.doc
文档评论(0)