《iOS组件与框架——iOS SDK高级特性剖析》——第8章,第8.5节解决冲突

简介:

本节书摘来自异步社区《iOS组件与框架——iOS SDK高级特性剖析》一书中的第8章,第8.5节解决冲突,作者 【美】Kyle Richter , Joe Keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看

8.5 解决冲突
iOS组件与框架——iOS SDK高级特性剖析
文档处于冲突状态时,可通过NSFileVersion类获悉文档的各种版本。用户轻按按钮Resolve Conflict时,将调用方法resolveConflict-Tapped:。这个方法收集处于冲突状态的文档的版本信息,并实例化一个自定义的页面视图控制器,让用户能够浏览不同的冲突版本并选择最终版本。


8534934692f2117fd02dbb94e7086ee8caf55986

这个方法首先获取冲突版本,即不能合并到本地版本的远程版本,并将它们放到一个数组中,因为可能存在多个冲突版本。接下来,这个方法获取文档的当前版本,即本地编辑的版本,并将它和冲突版本一起加入到一个可变数组中。这个可变数组提供了所有版本,供用户进行评估以选择正确的版本。然后,这个方法创建一个ICFConflictResolutionViewController实例,这是一个自定义页面视图控制器,让用户能够浏览冲突版本并选择正确版本。接下来,设置这个页面视图控制器的属性,让它知道有哪些冲突版本、当前版本是哪个(这对后面解决冲突很重要)、处于冲突状态的备忘录的URL以及选定正确版本后要调用的委托。

注意:

页面视图控制器提供了浏览冲突版本的方便途径,但并非只能采用这种方式。任何可显示冲突版本信息并让用户选择正确版本的方式都可行。
接下来,显示冲突解决页面视图控制器,如图8.6所示。


ee0b169ac6d9d39c17122ed1de4fb67ae7a71861

对于备忘录的每个冲突版本,冲突解决页面视图控制器都创建一个ICFConflictVersionView Controller实例,用于显示该冲突版本的信息。在方法viewControllerAtIndex:storyboard:中,页面视图控制器根据需要实例化版本视图控制器,并指定它应显示哪个NSFileVersion。


6d3bb5fe5a52a0d0c84426e3d76a17fffb19ef44

为显示各个版本的信息,版本视图控制器在方法viewDidLoad中从其NSFileVersion那里获取这些信息,并更新用户界面。


d43e528d1d24e8c47ebaff9151d00c7e988cc4d0

详细视图控制器再根据选定版本是否是当前版本采取相应的措施,以解决冲突;这是在方法noteConflictResolve:forCurrentVersion:中完成的。这个方法检查传入的参数isCurrentVersion,如果其值为YES,就删除URL指定的文件的其他版本,并告诉其他版本冲突解决了。


781da1ea9139aeed0a361521067a99d9cc9e5776

此时,文档将发出通知,指出自己恢复到了正常状态。方法documentStateChangedmethod收到这个通知后,让用户能够继续编辑文档(这在8.4.2节介绍过)。

相关文章
|
1月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
是否有其他框架可以在iOS设备上进行机器学习?
是否有其他框架可以在iOS设备上进行机器学习?
21 1
|
3月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
32 1
|
3月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
19 0
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
27 0
|
3月前
|
iOS开发
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
101 0
|
4月前
|
测试技术 API 开发工具
|
4月前
|
分布式计算 Hadoop Java
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
41 0
|
5月前
|
小程序 开发工具 Android开发
Donut多端框架小程序打包适配ios和安卓app
腾讯新出了一个 Donut 多端框架,可以直接将微信小程序转成 ios 和 安卓 app,小程序开发者工具里也集成了 app 相关升级、调试和打包的功能,终于可以一套代码开发出3个客户端了!
126 0
Donut多端框架小程序打包适配ios和安卓app
|
5月前
|
移动开发 网络协议 安全
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v8.0版已发布
MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp,服务端基于Netty编写。
70 0