《iOS组件与框架——iOS SDK高级特性剖析》——第8章,第8.3节UIDocument简介
本节书摘来自异步社区《iOS组件与框架——iOS SDK高级特性剖析》一书中的第8章,第8.3节UIDocument简介,作者 【美】Kyle Richter , Joe Keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看
8.3 UIDocument简介
iOS组件与框架——iOS SDK高级特性剖析
应用的功能围绕着以用户为中心的文档式数据展开时,创建UIDocument子类很合适。UIDocument用于自动完成与文档交互时所需的众多典型功能。例如,UIDocument支持自动保存,还支持后台加载和保存,以免影响主队列,进而降低用户界面的响应速度。另外,UIDocument将加载和保存逻辑抽象为简单的方法调用,让开发人员只需编写在文档数据和NSData之间进行转换的简单逻辑。对本章来说最重要的是,UIDocument还自动完成与iCloud的交互。
8.3.1 创建UIDocument子类
在示例应用中,用户创建的每条备忘录都是UIDocument子类ICFMyNoteDocument的实例。UIDocument子类应实现方法contentsForType:error:和loadFromContents: ofType:error:,并实现修改跟踪以启用UIDocument的自动保存功能。在示例应用中,由于备忘录只在一个字符串变量中存储备忘录内容,因此这些方法实现起来很容易。
在方法contentsForType:error:中,首先检查是否给myNoteText指定了值,如果没有,就提供一个默认值以防应用崩溃。接下来,将myNoteText转换为NSData并返回转换结果。这个NSData就是UIDocument将保存的内容。方法loadFromContents: ofType:error:执行的操作与此相反。
UIDocument以NSData格式返回保存的内容,而这个方法将其转换为子类的属性。它检查内容的长度,如果没有内容,就将myNoteText设置为空字符串,否则将NSData转换为NSString,并使用转换结果填充属性myNoteText。最后,这个方法告诉委托文档发生了变化,让它能够采取合适的措施,如使用新加载的数据更新用户界面。
为启用UIDocument提供的自动保存功能,子类需要实现变更跟踪。变更跟踪是使用UIDocument提供的undoManager启用的。
注意到不需要执行额外的操作就能自动保存:应用不需要实际实现撤销功能;给undoManager指定操作(action)后,自动保存功能便启用了。
8.3.2 与UIDocument交互
要创建UIDocument子类的实例,首先需要确定表示文件保存位置的URL。用户轻按示例应用中的加号按钮时,将调用主视图控制器的方法newMyNoteName,由它决定新备忘录将使用的文件名。这个方法在MyNote后面加上一个数字来生成文件名,并检查它是否存在;如果存在,就将数字加1,直到生成的文件名未被使用。接下来,将这个文件名附加到iCloud目录URL的后面,得到文件的完整路径。然后,将这个URL传递给详细视图控制器。在详细视图控制器中,方法configureView使用NSFileManager判断这个文件是否存在,并据此创建或加载它。
为创建文档,调用了UIDocument的方法saveToURL:forSaveOperation: completionHandler:,并将保存操作指定为UIDocumentSaveForCreating。为打开既有文档,调用了方法openWith CompletionHandler,并指定了一个结束块。在这里,结束块将更新用户界面,并将文本视图设置为第一响应者以便开始编辑备忘录。请注意,这里检查了文档的documentState;这个属性指出文档可编辑还是处于需要解决的冲突状态。冲突状态将在本章后面介绍,详情请参阅8.4.2节。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《OpenGL ES 3.x游戏开发(上卷)》一1.4 已有Android项目的导入和运行
本节书摘来异步社区《OpenGL ES 3.x游戏开发(上卷)》一书中的第1章,第1.4节,作者: 吴亚峰 责编: 张涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.4 已有Android项目的导入和运行 上一节介绍了如何搭建Android开发环境、如何开发Hello Android应用程序以及如何调试Android的应用程序,接下来在本节中将简要介绍已有Android项目的导入和运行。 1.4.1 项目的导入 首先介绍怎样将已有的Android项目导入Eclipse,此处以本书最后部分大案例中的“3D可爱抓娃娃”为例进行讲解,具体步骤如下。 (1)启动Eclipse,依次单击“File|Import”,系统将弹出导入项目的窗口Import,选择Android/Existing Android Code Into Workspace,然后单击“Next”按钮进入下一界面,如图1-64所示。 (2)在项目导入对话框中首先单击右上侧的“Browse...”按钮,如图1-65所示,找到工作区“D: Androidworkspace”,系统将工作区中的所有项目导入到“Projec...
- 下一篇
《Android 应用测试指南》——第2章,第2.9节小结
本节书摘来自异步社区《Android 应用测试指南》一书中的第2章,第2.9节小结,作者 【阿根廷】Diego Torres Milano(迭戈 D.),更多章节内容可以访问云栖社区“异步社区”公众号查看 2.9 小结我们复习了Android测试背后的主要技术和工具。 本章覆盖的内容如下。给Android样本工程创建相应的Android测试工程,作为第一个测试工程。创建相应测试工程的最佳方式,虽然你可能觉得没必要,但是事实证明如此。新建一个简单的测试类来测试工程中的行为。我们没有添加有用的测试用例,而是添加了一些例子来确认测试框架是可行的。我们还从Eclipse中执行了样例测试用例,从命令行也尝试了下,从而理解多种执行用例的方式。在这过程中,我们提到了行为管理器和am命令行的典型使用方式。分析了最常用的命令行以及它们的选项。创建了客户标签来给我们测试用例分类,从而演示了下标签注释的用途。执行测试用例并解释结果,让我们理解我们的应用程序的执行情况。下一章,我们将要分析前面提到的技术、框架和工具。将会更加详细地阐述它们的用途,并举例说明。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果