Patrick Alessi为包括小型企业和美国空军在内的客户建立以数据为中心的应用程序。他建立了MotivationalQuotes和CNodes应用。他是Professional iPhone and iPad Database Application Programming 和《iOS游戏开发入门经典》的作者。当前,他努力专注于为移动设备建立移动和互联应用程序。
第Ⅰ部分 操作和显示iPhone 和iPad 上的数据
第1 章 数据驱动应用程序介绍
1 1 创建一个简单的数据驱动应用程序
1 1 1 创建项目
1 1 2 添加UITableView
1 1 3 获取数据
1 1 4 实现数据模型类
1 1 5 显示数据
1 2 深入研究
1 2 1 设计模式
1 2 2 读取文本文件
1 3 前往下一章
2 1 什么是SQLite
2 1 1 SQLite 库
2 1 2 SQLite 和Core Data
2 2 创建一个简单的数据库
2 2 1 设计数据库
2 2 2 创建数据库
2 2 3 填充数据库
2 2 4 可视化SQLite 数据库的工具
2 3 连接到数据库
2 3 1 启动项目
2 3 2 模型类
2 3 3 DBAccess 类
2 3 4 参数化查询
2 3 5 写入数据库
2 3 6 显示目录
2 3 7 查看产品详情
2 4 前往下一章
第3 章 使用UITableView 显示数据
3 1 定制表视图
3 1 1 表视图单元格样式
3 1 2 将子视图添加到contentView
3 1 3 子类化UITableViewCell
3 2 实现区段和索引
3 3 实现搜索
3 4 优化表视图性能
3 4 1 重新使用现有的单元格
3 4 2 不透明的子视图
3 4 3 使用drawRect 自定义绘制单元格
3 4 4 配件视图的用户界面约定
3 5 前往下一章
第4 章 用户界面元素
4 1 使用故事板创建界面
4 1 1 开始创建故事板示例应用程序
4 1 2 向故事板中添加Sub-detail 屏幕
4 1 3 向故事板中添加模态屏幕
4 2 使用分隔视图控制器显示主/从数据
4 2 1 UISplitViewController 简介
4 2 2 UISplitViewControllerDelegate 协议
4 2 3 开始实现分隔视图示例应用程序
4 2 4 创建Detail 界面
4 2 5 使用主/从视图添加调查
4 3 在弹出窗口中显示数据
4 3 1 创建InfoViewController
4 3 2 显示UIPopoverController
4 4 手势识别
4 4 1 UIGestureRecognizer 类
4 4 2 使用手势识别器
4 5 文件共享支持
4 5 1 在示例应用程序中启用文件共享
4 5 2 序列化调查数据数组
4 5 3 反序列化并加载调查数据数组
4 5 4 共享数据
4 6 前往下一章
第Ⅱ部分 使用Core Data 管理数据
第5 章 Core Data 介绍
5 1 Core Data 基础
5 2 Core Data 架构
5 2 1 Core Data 栈
5 2 2 SQLite 和Core Data
5 3 Core Data 和iCloud
5 4 数据保护
5 5 一个简单的使用Core Data 实现的任务管理器
5 5 1 创建项目
5 5 2 检查模板代码
5 5 3 修改模板代码
5 6 前往下一章
第6 章 在Xcode 中对数据建模
6 1 模型化数据
6 1 1 定义实体和它们的特性
6 1 2 添加实体间的关系
6 1 3 创建获取属性和获取请求模板
6 2 创建定制NSManagedObject 子类
6 2 1 实现验证规则
6 2 2 实现默认值
6 3 创建任务模型
6 4 前往下一章
第7 章 创建Core Data 应用程序
7 1 任务应用程序架构
7 1 1 数据模型
7 1 2 类模型
7 1 3 用户界面
7 2 编写应用程序代码
7 3 MasterViewController 和基本用户界面
7 4 产生托管对象子类
7 5 添加和查看任务
7 5 1 创建ViewTaskController
7 5 2 修改MasterViewController
7 6 创建编辑控制器
7 6 1 使用EditTextViewController 编辑文本
7 6 2 使用EditPriorityViewController 设置优先级
7 6 3 使用EditLocationViewController 添加和编辑位置
7 6 4 使用EditDateController 修改日期
7 6 5 完成编辑控制器
7 7 在MasterViewController 中显示结果
7 7 1 使用NSSortDescriptor 排序结果
7 7 2 使用NSPredicate 过滤结果
7 8 使用NSFetchedResultsController 创建分组表
7 9 实现定制托管对象
7 9 1 编写动态属性代码
7 9 2 运行时默认值
7 9 3 验证单个字段
7 9 4 多字段验证
7 10 前往下一章
第8 章 和Core Data 相关的Cocoa 特性
8 1 键-值编码
8 1 1 键和键路径
8 1 2 使用键设置值
8 1 3 集合操作符
8 1 4 使用KVC 时额外要考虑的事
8 2 键-值观察
8 2 1 观察对象的改变
8 2 2 自动和手动实现KVO
8 2 3 键-值观察示例
8 3 使用NSPredicate
8 3 1 创建谓词
8 3 2 使用谓词
8 4 排序描述符
8 5 前往下一章
第9 章 Core Data 迁移和性能
9 1 模型版本控制和架构迁移
9 1 1 模型版本控制
9 1 2 轻量迁移
9 1 3 生成映射模型
9 2 线程安全与Core Data
9 2 1 线程设计
9 2 2 线程和Core Data
9 2 3 线程和NSOperation
9 2 4 Core Data 线程处理示例
9 3 Core Data 性能
9 3 1 故障
9 3 2 数据存储类型
9 3 3 存储二进制数据
9 3 4 实体继承
9 3 5 运行时性能
9 3 6 使用获取结果控制器管理变化
9 4 使用Instruments 进行性能分析
9 4 1 启动Instruments
9 4 2 Instruments 界面
9 4 3 Core Data 仪表
9 5 前往下一章
第Ⅲ部分 使用Web 服务集成应用程序
第10 章 在iPhone 上使用XML
10 1 iOS SDK 和Web
10 1 1 Web 应用程序架构
10 1 2 同步数据获取
10 1 3 URL 加载系统
10 1 4 Web 访问示例
10 1 5 从服务器请求数据
10 2 XML 和iPhone SDK
10 2 1 XML 简要概述
10 2 2 使用NSXML 解析器解析XML
10 2 3 扩展示例,解析XML
10 2 4 使用libxml 生成XML
10 2 5 XML 生成示例
10 3 前往下一章
第11 章 使用Web 服务进行集成
11 1 网络应用程序架构
11 1 1 两层架构
11 1 2 三层架构(n 层)
11 1 3 应用程序通信
11 2 Web 服务介绍
11 2 1 SOAP 消息
11 2 2 REST 协议
11 3 示例1:基于位置的搜索
11 3 1 开始
11 3 2 创建界面
11 3 3 Core Location
11 3 4 本地搜索API
11 3 5 使用搜索栏
11 3 6 处理Web 服务响应
11 4 示例2:内容分析
11 4 1 开始
11 4 2 创建用户界面
11 4 3 实现POST 调用
11 4 4 接收XML 响应
11 4 5 解析响应XML
11 4 6 完成
11 5 前往下一章
附录A 应用程序故障诊断工具
A 1 Instruments
A 1 1 启动Instruments
A 1 2 跟踪文档
A 1 3 Objective-C 内存管理
A 1 4 内存泄漏示例应用程序
A 1 5 在Instruments 中分析内存泄漏
A 2 静态分析器
在1980 年,当Patrick Alessi 第一次看到他的名字在终端上闪过时,他就迷恋上了编写计算机程序。从那以后,他开始使用各种语言为他能获得的硬件平台编写软件,包括在他接受工程教育期间对VAX 系统上的Fortran 语言的短暂而痛苦的尝试。Patrick 从美国罗格斯大学获得了土木工程学士学位,然后又从美国史蒂文斯理工学院获得了计算机科学学士学位。
在专业领域,Patrick 主要研究以数据为中心的应用程序,其客户范围小到小型企业数据库,大到美国空军的大规模系统。当前,他关注于移动开发的前景,并为如iPhone 和iPad这样的移动设备开发网络应用程序。
Patrick 工作之余喜欢玩游戏(尤其是“星际争霸”)、摄影、旅行和与家人在一起。你可以关注他的推特pwalessi,或访问他的博客iphonedevsphere.blogspot.com。
技术编辑简介
Michael Gilbert 是一名在各种工程公司工作过的资深系统程序员。他的第一个游戏是在Atari ST 上开发的,并且他是STart 杂志的特约编辑,经常在该杂志上发表文章。多年以来,他一直在为世界范围内的用户开发PC 和Mac 上的游戏软件。他还是一位专业的Flash ActionScript 程序员,并且开发了一个名为HigherGames 的流行互联网游戏环境。现在他喜欢开发iPhone 和iPad 游戏,并且当前已经在App Store 上发布了几款游戏,并且将来还会发布更多。在业余时间他喜欢和他的妻子Janeen 一起玩拼字游戏。
致 谢
我要借此机会感谢每位促成这本书出版的人。首先我要感谢我的策划编辑Mary James,本书的第2 版在她的领导下完成了策划过程。其次我要感谢我的项目编辑Brian MacDonald,他帮助我解决了在写作和出版过程中出现的每个问题。我还要感谢我的技术编辑Mike Gilbert,他利用宝贵的应用开发时间来审查我的作品。最后我要感谢所有其他编辑和制作人员,他们投入了大量时间在本项目上从而使它最终能够印刷。
对于我的妻子Cheryl 和我的继女Morgan,我无论如何感谢都不为过。在我编写本书的整个期间,她们容忍了我的坏脾气,还容忍了我没时间参加有趣的家庭活动。在我编写本书的工作时她们操持家务。你们对我的耐心是令人震惊的。我还想要感谢我的妈妈,在我非常小的时候她就引导我学习计算机并教会了我计算机的基础知识。最后我想要感谢我的爸爸,他促使我努力工作并让我明白了如何成为一名父亲。
前 言
随着iPhone 的推出,苹果公司彻底改变了移动计算市场。iPhone 将移动电话从一台用来打电话、检查电子邮件和查找电影场次的设备转换为一台几乎可以运行任何类型的应用程序的计算机。自从iPhone 在2007 年发布以来,开发人员已经编写了超过70 万种可在iOS设备上运行的应用程序。这些应用程序可分为很多种类型,包括游戏、实用工具、社交网络、参考、导航和商务等类型。
计算领域的趋势正在趋向于可移动性和移动平台,如iPhone 和iPad,并且正在远离基于桌面的环境。尤其在商业和企业环境中,决策者想要一天24 小时方便快捷地访问他们的数据。iPhone 和iPad 是移动计算的理想平台,因为它们具有合适的结构因素和广泛的库和API 集合。
尽管市场上有很多非常好的iOS 软件开发方面的书籍,但我不能找到一本专门面向企业开发者的书籍,这些企业开发者需要使企业数据或商业应用程序具有可移动性。我编写此书的最初目的是向这些开发者提供这样的信息,他们可用这些信息从后台服务器获得企业数据,并在可移动设备上显示和操作这些数据,然后获得合适的返回给他们的企业信息系统的信息。
在我编写这本书的过程中,有一个事实变得清晰起来,那就是除了我在开始时提到的业务用例,我在本书中介绍的工具和技术还适合大多数应用程序类型。任何类型的应用程序的开发者,只要他需要在iOS 上存储数据,就都会对Core Data API 的广泛覆盖率感兴趣。
任何想要发送数据到如Facebook 或Twitter 这样的外部Web 服务的开发者都能受益于本书的处理XML 和Web 服务的章节。许多应用程序都需要使用表显示数据,对此我也会详细介绍。最后,所有iOS 应用程序都有一个用户界面,我将介绍如何使用故事板构建用户界面。尽管我的最初想法是为企业开发者编写一本书,但我相信我写的书几乎对开发任何类型的应用程序都有用。
此版本的新内容
自本书的第1 版发行以来,iOS 开发社区已发生了很大变化。苹果公司持续发布具有新特性的iOS 新版本来帮助开发者为苹果设备构建更好的应用程序。
通过引入Automatic Reference Counting(ARC),苹果公司已极大简化了iOS 应用程序中的内存管理工作。开发者不再需要手工保留或释放内存,而是由ARC 处理这些。因此,我更新了本书的示例来实施ARC 和与ARC 兼容。
苹果公司还通过提供故事板来精简iOS 用户界面的开发。故事板替代了Interface Builder 原来提供的功能。现在你可以在Xcode 的故事板中处理所有用户界面工作,我已经修改了上一版的代码和示例以在合适的地方使用故事板。
最后,所有屏幕截图和许多其他图表都已被重画以反映这些或其他一些自第1 版以来在iOS 生态系统中进行开发的变化。
本书读者对象
如前所述,我最初是为企业开发者编写此书的,他们主要负责移动化企业数据和编写在移动设备上呈现和操作这些数据的应用程序。在写作这本书期间,我开始确信我正在介绍的工具、API 和开发技术对于商业领域之外的许多种类的应用程序开发都是有价值的。
任何编写应用程序以任何方式处理数据的人都应该会发现本书很有用。
本书应该不是你的第一本iOS 应用程序开发书籍。在本书中你找不到“Hello World”iOS 应用程序。有很多好书可用来学习如何构建基本iOS 应用程序。本书主要针对已经理解如何构建iOS 应用程序的开发者,他们知道如何使用Interface Builder 设计和构建用户界面,并且熟练掌握了Objective-C。这并不是说初学者无法在这里找到有用的知识,只是我在编写这本书时认为读者已经理解了iOS 应用程序的基本架构并能够熟练地使用Xcode工具。
本书内容
本书讲述了用于理解如何构建以数据为中心的iOS 应用程序的技术。你将会发现和SQLite 有关的章节,SQLite 是作为iOS 的一部分而被包含在其中的数据库引擎。此处你将学习如何从各种格式的文件中导入数据到数据库中和如何在设备上查询数据。我将广泛地介绍UITableView 控件,包括自定义数据显示的不同策略。另外我将介绍如何使用故事板构建应用程序用户界面。你还将看到Core Data API 的广泛使用。当你需要在设备上构建和存储数据时,你将发现你会经常使用这个极好的数据持久存储框架。最后将介绍如何在iOS上构建XML 和如何将你的应用程序与Web 服务集成。
本书结构
我将本书分为三个部分,它们宽松地对应企业应用程序中的数据流。本书的第Ⅰ部分介绍了如何从如Oracle、MySQL 或SQL Server 这样的大型数据库获取数据,以及如何将这些数据存储到设备中并显示。本书的第Ⅱ部分介绍了如何在设备上构建数据和Core DataAPI。本书的最后一部分介绍了如何从设备获取数据和与Web 服务通信。尽管我尝试以一种逻辑顺序逐章呈现这些材料,但读者不需要按顺序阅读本书。如果你正在构建基于表视图的应用程序并需要知道如何定制表的外观,则你只需跳转到第3 章。如果你正在构建针对iPad 的应用程序,则只需要阅读第4 章。如果你需要实现Core Data,可跳转到第Ⅱ部分。如果你需要集成Web 服务,可参考第10 章和第11 章。
阅读本书需要做的准备
因为这本书适合中到高级iOS 开发者,所以你应该已经具有了阅读本书所需的所有工具。你需要一台安装有Mac OS X 的苹果计算机来构建iOS 应用程序。另外你需要安装Xcode 开发环境,它由苹果公司在Mac 应用商店免费提供。
最后一个需求是如果你想要在物理设备上安装你的应用程序,而不是仅在iOS 模拟器上运行你的代码,还需要加入iOS 开发者计划。在编写这本书时,加入该计划每年需花费99 美元,从而允许你在你的设备上构建和运行应用程序,并可将最终完成的应用程序提交给苹果iOS 应用商店用于销售。如果你当前不是开发者计划成员,不要担心。本书中只有很少一部分代码需要在真实设备上运行,而本书中几乎所有代码都可在模拟器中正确运行。
对于需要在设备上运行的代码,我会在文本中做出标注。
源代码
当你阅读本书的源代码时,你可以选择手工输入所有代码,或者使用本书附带的源代
码文件。本书使用的所有源代码都可从www.wrox.com 下载,具体对于本书来说,其源代码可从www.wrox.com/remtitle.cgi?isbn=1118391845 的Download Code 选项卡处下载。
你还可以在www.wrox.com 处通过EISBN(本书的EISBN 为978-1-1183-9184-6)搜索
本书来找到其源代码。www.wrox.com/dynamic/books/download.aspx 处提供了当前所有Wrox 书籍的完整代码下载列表。
在每一章中,你可在清单标题和文本中根据需要查找代码文件名称的引用。
大多数www.wrox.com 中的代码都以.ZIP、.RAR 或类似的适合特定平台的文档格式
压缩。下载这些代码后,你只需要使用合适的压缩工具解压缩。
勘误表
尽管我们已经尽了最大的努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免走入误区,当然,这还有助于提供更高质量的信息。
要在网站上找到本书英文版的勘误表,可以登录www.wrox.com/remtitle.cgi?isbn= 1118311809,或者访问http://www.wrox.com,通过Search 工具或书名列表查找本书,然后在本书的细目页面上,单击Errata 链接。在这个页面上可以查看到Wrox 编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表, 网址是www.wrox.com/misc-pages/ booklist.shtml。
如果你在勘误表上没有找到错误,那么可以到www.wrox.com/contact/techsupport.shtml
上,完成上面的表格,并把找到的错误发送给我们。我们将会核查这些信息,如果无误的话,会把它放置到本书的勘误表中,并在本书的后续版本中更正这些问题。
p2p.wrox.com
要与作者和同行讨论,请加入p2p.wrox.com 上的P2P 论坛。这个论坛是一个基于Web的系统,便于你张贴与Wrox 图书相关的消息和相关技术,与其他读者和技术用户交流心得。
该论坛提供了订阅功能,当论坛上有新的消息时,它可以给你传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。
在http://p2p.wrox.com 上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:
(1) 进入p2p.wrox.com,单击Register 链接。
(2) 阅读使用协议,并单击Agree 按钮。
(3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,并单击Submit 按钮。
(4) 你会收到一封电子邮件,其中的信息描述了如何验证账户和完成加入过程。
不加入P2P 也可以阅读论坛上的消息,但要张贴自己的消息,就必须加入该论坛。
加入论坛后,就可以张贴新消息,回复其他用户张贴的消息。可以随时在Web 上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum 图标。
关于使用Wrox P2P 的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox 图书的许多常见问题的解答。要阅读FAQ,可以在任意P2P 页面上单击FAQ 链接。
¥1.00
¥1.00
¥398.00
¥59.90
¥99.00
¥69.90