《iPhone开发秘籍 第2版》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)萨丹著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2010
  • ISBN:9787115240019
  • 页数:654 页
图书介绍:iPhone SDK以及iPhone开发的全面信息,对iPhone SDK各种组件的介绍,包括iPhone 3.0 SDK新增特性,iPhone开发的基本流程、基本原理和基本原则的讲解。结合实例讲解了如何开发各种iPhone特性。

第1章 iPhone SDK简介 1

1.1 iPhone开发人员计划 1

1.1.1在线开发人员计划 1

1.1.2标准开发人员计划 2

1.1.3企业开发人员计划 2

1.1.4大学开发人员计划 2

1.1.5注册 2

1.2开始 2

1.2.1下载SDK 2

1.2.2开发设备 3

1.2.3模拟器的限制 4

1.2.4Tethering 4

1.3理解型号差异 5

1.3.1摄像头 5

1.3.2扬声器和麦克风 5

1.3.3手机 6

1.3.4Core Location的差异 6

1.3.5振动支持和接近传感器 6

1.3.6处理器速度 6

1.3.7OpenGL ES 7

1.4平台限制 7

1.4.1存储限制 7

1.4.2数据访问限制 7

1.4.3内存限制 7

1.4.4交互限制 8

1.4.5电量限制 8

1.4.6应用程序限制 8

1.4.7用户行为限制 9

1.5SDK限制 9

1.6使用开发人员门户 9

1.6.1建立团队 10

1.6.2请求证书 10

1.6.3注册设备 11

1.6.4注册应用程序标识符 11

1.6.5设置 12

1.7组建iPhone项目 12

1.7.1 iPhone应用程序的主干 13

1.7.2 main.m 14

1.7.3应用程序委托 15

1.7.4视图控制器 16

1.7.5关于本书示例代码的说明 16

1.8 iPhone应用程序组件 17

1.8.1应用程序文件夹层次结构 17

1.8.2可执行文件 17

1.8.3 Info.plist文件 17

1.8.4图标和默认图像 19

1.8.5 NIB文件 20

1.8.6应用程序束中不存在的文件 20

1.8.7 IPA归档 20

1.8.8沙盒 20

1.9编程范例 21

1.9.1面向对象编程 21

1.9.2模型-视图控制器 22

1.10小结 27

第2章 构建第一个项目 28

2.1创建新项目 28

2.2用模板构建Hello World应用程序 29

2.2.1创建新项目 29

2.2.2 Project窗口 30

2.2.3 Detail窗格 31

2.2.4编辑器窗口 32

2.2.5查看项目 32

2.2.6打开视图控制器xib 33

2.2.7编辑视图 34

2.2.8运行应用程序 34

2.3使用模拟器 35

2.4极简单的Hello World 36

2.4.1浏览SDK API 38

2.4.2将Interface Builder文件转换成Objective-C代码 39

2.5使用调试器 41

2.5.1设置断点 41

2.5.2打开调试器 41

2.5.3运行程序 41

2.5.4查看标签 42

2.5.5设置另一个断点 42

2.5.6使用文本消息 43

2.5.7移动Clear Log按钮 43

2.5.8启用Zombie 44

2.6 内存管理 45

2.6.1泄漏 45

2.6.2缓存 45

2.7秘诀:使用Instruments检测内存泄漏 46

2.8秘诀:使用Instruments监视缓存对象的内存分配 48

2.9使用Clang静态分析器 50

2.10针对iPhone进行构建 51

2.10.1安装开发配置 51

2.10.2编辑应用程序标识符 51

2.10.3设置Code Signing Identity 52

2.10.4编译和运行Hello World应用程序 53

2.10.5对编译后的应用程序签名 53

2.11从Xcode到iPhone: Organizer Interface 54

2.11.1 Projects and Sources列表 54

2.11.2 Devices列表 55

2.11.3 iPhone Development Tools列表 55

2.11.4 Summary选项卡 55

2.11.5 Console选项卡 56

2.11.6 Crash Logs选项卡 56

2.11.7 Screenshot选项卡 57

2.12使用编译器指令 57

2.12.1获得特定于iPhonc的定义 58

2.12.2运行时检查 58

2.12.3记忆标记 59

2.12.4折叠方法 60

2.13针对发布进行构建 60

2.14清除构建 61

2.14.1针对App Store进行编译 62

2.14.2调试App Store上传 63

2.15针对临时发布进行构建 64

2.15.1注册设备 64

2.15.2构建临时配置 64

2.15.3在项目中添加授权文件 64

2.15.4在设置中添加授权文件 64

2.15.5构建临时应用程序 65

2.15.6为临时发布添加图片 65

2.16定制Xcode标识 66

2.17创建自定义Xcode模板 66

2.17.1覆盖com-yourcompany 67

2.17.2构建其他模板 67

2.18并排查看代码 68

2.19小结 69

第3章Objective-C训练营 70

3.1 Objective-C编程语言 70

3.2类与对象 70

3.2.1创建对象 72

3.2.2内存分配 72

3.2.3释放内存 73

3.3方法、消息和选择器 73

3.3.1动态类型检查 74

3.3.2继承方法 75

3.3.3声明方法 76

3.3.4实现方法 76

3.3.5类方法 78

3.3.6快速枚举 78

3.4类层次结构 79

3.5日志信息 79

3.6属性 81

3.6.1点表示法 81

3.6.2属性与内存管理 81

3.6.3创建属性 82

3.6.4创建自定义的取值方法和赋值方法 83

3.6.5属性的特性 84

3.7简单的内存管理 85

3.7.1创建对象 85

3.7.2创建自动释放的对象 86

3.7.3自动释放对象的生命周期 87

3.7.4保留自动释放的对象 87

3.7.5已保留属性 87

3.7.6高保留计数 89

3.7.7创建对象的其他方式 90

3.7.8释放对象 91

3.8 创建单例 93

3.9类别(扩展类) 93

3.10协议 94

3.10.1定义协议 95

3.10.2合并协议 95

3.10.3增加回调 95

3.10.4声明可选回调 96

3.10.5实现可选回调 96

3.10.6符合协议 97

3.11Foundation类 97

3.11.1字符串 98

3.11.2数字与日期 101

3.11.3集合 103

3.12补充内容:消息转发 107

3.12.1实现消息转发 108

3.12.2使用转发消息 109

3.12.3思路整理 109

3.12.4超级简单的转发 110

3.13小结 110

第4章 设计界面 111

4.1 UIView和UI window 111

4.1.1显示数据的视图 111

4.1.2做出选择的视图 112

4.1.3控件 112

4.1.4表格和拾取器 113

4.1.5栏 113

4.1.6进度与活动 114

4.2 UIViewController 114

4.2.1 UIViewController 114

4.2.2 UINavigationcontroller 115

4.2.3 UITabBarController 115

4.2.4表格控制器 115

4.2.5地址簿控制器 116

4.2.6 UIImagePickerCcntroller 116

4.2.7邮件撰写 116

4.2.8 GKPeerPickerController 116

4.2.9 Media Player控制器 117

4.3视图设计几何学 117

4.3.1状态栏 117

4.3.2导航栏、工具栏和选项卡栏 118

4.3.3键盘和拾取器 119

4.3.4文本字段 120

4.3.5 UIScreen类 120

4.4构建界面 120

4.5实战演练:使用IB构建温度单位转换器 121

4.5.1新建项目 121

4.5.2添加媒体 121

4.5.3Interface Builder 121

4.5.4编辑导航栏 122

4.5.5替换主视图 123

4.5.6启用仿真元素 123

4.5.7创建图像背景 123

4.5.8添加标签和视图 123

4.5.9测试界面 124

4.5.10添加出口和动作 124

4.5.11检查新类头 125

4.5.12添加连接 126

4.5.13获取紫色 126

4.5.14定义转换方法 127

4.5.15运行应用程序 127

4.6实战演练:手动构建温度单位转换器界面 127

4.7实战演练:创建混合转换器 130

4.7.1清理基本模板 131

4.7.2通过xib添加新视图控制器类 131

4.7.3设计界面 131

4.7.4编辑视图控制器实现 132

4.7.5编辑main…m 132

4.7.6运行应用程序 133

4.8实战演练:直接从代码加载xib文件 133

4.8.1清理xib 134

4.8.2更新loadView 134

4.9针对旋转进行设计 134

4.10启用旋转 135

4.11自动调整大小 136

4.11.1自动调整大小示例 136

4.11.2评估自动调整大小选项 138

4.12移动视图 138

4.13交换视图 141

4.14补充内容:6个有用的Interface Builder技巧 142

4.15小结 143

第5章 使用视图控制器 144

5.1使用导航控制器开发 144

5.1.1设置导航控制器 144

5.1.2推入和弹出视图控制器 145

5.1.3导航项类 145

5.1.4模态演示 146

5.2实用工具函数 146

5.3秘诀:构建一个简单的双项菜单 147

5.4秘诀:添加一个分段控件 149

5.5秘诀:在视图控制器之间导航 150

5.6秘诀:使用创意弹出选项 152

5.6.1加载一个视图控制器数组 152

5.6.2推入临时视图 152

5.7秘诀:演示一个自定义模态信息视图 153

5.8秘诀:选项卡栏 155

5.9秘诀:记住选项卡状态 157

5.10补充点:Interface Builder和选项卡栏控制器 160

5.11小结 161

第6章 组合视图和动画 162

6.1视图层次结构 162

6.2秘诀:建立视图层次结构树 163

6.3秘诀:查询子视图 164

6.4管理子视图 166

6.4.1添加子视图 166

6.4.2重新排序和删除子视图 166

6.4.3视图回调 166

6.5秘诀:标记和检索视图 167

6.6秘诀:命名视图 168

6.7视图的几何特征 172

6.7.1框架 172

6.7.2变换 173

6.7.3坐标系 173

6.8秘诀:视图框架的处理 173

6.8.1调整大小 174

6.8.2 CGRect和中心 175

6.8.3其他实用工具方法 176

6.9秘诀:移动带边界的视图到任意位置 179

6.10秘诀:视图变形 180

6.11显示和交互特性 183

6.12 UIView动画 183

6.12.1建立UIView动画块 184

6.12.2动画回调 184

6.13秘诀:视图的淡入和淡出 185

6.14秘诀:视图交换 186

6.15秘诀:翻转视图 187

6.16秘诀:使用Core Animation Transitions 188

6.17秘诀:一般的Core Animation调用 190

6.18翻页过渡 192

6.19秘诀:当视图显示时反弹视图 193

6.20秘诀:图像视图动画 195

6.21补充内容:给视图添加映射 196

6.22小结 199

第7章 图像处理 201

7.1秘诀:查找和加载图像 201

7.1.1读取图像数据 201

7.1.2加载图像文件 203

7.2秘诀:从iPhone相册访问照片 205

7.2.1使用图像拾取器 206

7.2.2添加2.x支持 206

7.2.3添加3.1支持 206

7.2.4拾取视频 206

7.3秘诀:选择和定制相册中的图像 208

7.4秘诀:拍摄照片并将照片写到相册上 210

7.5秘诀:将图片保存到Documents文件夹 212

7.6秘诀:通过电子邮件发送图片 213

7.7秘诀:捕捉定时拍摄的照片 214

7.8秘诀:使用定制摄像头覆盖图 216

7.9秘诀:在可滚动视图中显示图像 218

7.10秘诀:创建多图像分页滚动 220

7.11秘诀:从头开始创建新图像 221

7.12秘诀:构建图像缩略图 224

7.13调整照片方向 227

7.14捕捉屏幕截图 229

7.15秘诀:直接处理位图 230

7.15.1在位图上下文中绘制 230

7.15.2应用图像处理 232

7.15.3图像处理实况 233

7.16补充内容:灰度模式 236

7.17小结 237

第8章 手势和触摸 238

8.1触摸 238

8.1.1阶段 238

8.1.2触摸和视图方法 239

8.1.3触摸视图 239

8.1.4多点触摸 240

8.2秘诀:添加一个简单直观的操作界面 240

8.3秘诀:限制移动 241

8.4秘诀:测试触摸 242

8.5秘诀:测试位图上的触摸 243

8.6秘诀:向直接操作界面添加持久性 246

8.6.1存储状态 246

8.6.2恢复状态 247

8.7秘诀:通过归档实现持久性 248

8.8秘诀:添加撤销支持 250

8.8.1创建撤销管理器 250

8.8.2子视图撤销支持 250

8.8.3使用导航栏 250

8.8.4注册撤销 251

8.9秘诀:添加晃动控制的撤销支持 252

8.9.1添加撤销和恢复的动作名称 253

8.9.2提供晃动以编辑支持 253

8.9.3设置第一个响应程序 253

8.10秘诀:屏幕绘图 254

8.11秘诀:线的计算 255

8.12秘诀:检测圆形 257

8.13秘诀:多点触摸 259

8.14秘诀:区分手势 260

8.15补充内容:交互式调整大小和旋转 264

8.16小结 269

第9章 构建和使用控件 270

9.1 UIControl类 270

9.1.1控件种类 270

9.1.2控件事件 270

9.2按钮 272

9.3在Interface Builder中添加按钮 273

9.3.1样式 273

9.3.2连接按钮与动作 274

9.3.3假按钮 275

9.4在Xcode中构建定制按钮 275

9.5多行按钮文本 277

9.6向按钮添加动画元素 277

9.7秘诀:为按钮响应制作动画效果 278

9.8秘诀:使用开关 279

9.9秘诀:添加定制滑块缩略图 281

9.9.1定制UISlider 281

9.9.2增加效能 282

9.10秘诀:创建一个可两次点击的分段控件 286

9.11秘诀:子类化UIControl 287

9.11.1跟踪触摸 288

9.11.2分派事件 288

9.12秘诀:关闭UITextField键盘 290

9.12.1文本特征属性 291

9.12.2其他文本字段属性 291

9.13秘诀:关闭UITextView键盘 292

9.14秘诀:构建更好的文本编辑器 294

9.15秘诀:文本输入筛选 296

9.16秘诀:添加一个页面指示器控件 298

9.17秘诀:创建一个可定制的分页滚动条 300

9.18秘诀:构建工具栏 304

9.18.1在Xcode中构建工具栏 305

9.18.2工具栏提示 307

9.19补充内容:智能标签 307

9.20小结 308

第10章 提醒用户 309

10.1通过警告框直接与用户对话 309

10.1.1构建简单的警告框 309

10.1.2警告框委托 310

10.1.3显示警告框 311

10.1.4警告框类 311

10.2秘诀:无按钮警告框 312

10.3秘诀:使用run循环创建模态警告框 313

10.4秘诀:要求用户进行文本输入 316

10.5秘诀:对警告框视图使用可变参数 318

10.6秘诀:展示简单的菜单 319

10.7秘诀:在动作表中显示文本 321

10.8 “Please Wait”:向用户显示进度 321

10.9秘诀:构建UIProgressView 322

10.10构建定制覆盖图 324

10.11秘诀:可点击的覆盖图 326

10.12秘诀:可调整方向的滚动警告框 327

10.13秘诀:使用网络活动指示器 329

10.14秘诀:给应用程序贴标记 329

10.15 秘诀:简单的音频警告 330

10.15.1系统声音 330

10.15.2震动 331

10.15.3警告 331

10.15.4延迟 332

10.16补充内容:展示音量警告框 333

10.17小结 333

第11章 创建和管理表格视图 335

11.1 UITableView和UITableView-Controller简介 335

11.2秘诀:实现最基本的表格 337

11.2.1填充表格 337

11.2.2数据源方法 338

11.2.3重用单元格 338

11.2.4字体表格示例 338

11.3秘诀:更改表格的背景色 340

11.4秘诀:创建表格图像后挡板 341

11.5秘诀:单元格类型研究 343

11.6秘诀:使用Interface Builder构建定制单元格 344

11.6.1创建定制单元格的技巧 346

11.6.2增加定制选择特性 347

11.7秘诀:单元格颜色交替 347

11.8秘诀:使用内置控件构建定制单元格 348

11.9秘诀:记住定制单元格的控制状态 350

11.10秘诀:创建勾选的表格单元格 353

11.11移除单元格选中时的高亮显示状态 354

11.12秘诀:处理展开配件 355

11.13秘诀:删除单元格 357

11.13.1显示删除控件 357

11.13.2隐藏删除控件 357

11.13.3处理删除请求 357

11.13.4滑动单元格 358

11.13.5添加单元格 358

11.14秘诀:对单元格重新排序 360

11.15秘诀:向表格添加撤销支持 361

11.15.1支持“晃动以编辑” 362

11.15.2添加Undo和Redo按钮 362

11.15.3执行撤销和恢复 363

11.15.4准备表格撤销操作 364

11.16秘诀:表格排序 366

11.17秘诀:搜索表格 367

11.17.1构建搜索显示控制器 367

11.17.2构建可搜索数据源方法 368

11.17.3委托方法 369

11.18秘诀:处理分段 370

11.18.1创建基于分段的数据结构 370

11.18.2分段计数和行计数 371

11.18.3返回单元格 371

11.18.4创建标题 372

11.18.5创建分段索引 373

11.18.6分段委托 374

11.19秘诀:创建分组表格 374

11.20秘诀:定制表头和脚注 375

11.21秘诀:创建带有各种单元格类型和高度的分组表格 377

11.22秘诀:构建多轮表格 380

11.23秘诀:使用基于视图的选取器 383

11.24秘诀:使用UIDatePicker 385

11.25补充内容:格式化日期 388

11.26小结 390

第12章 使用GameKit和Bonjour进行连接 391

12.1秘诀:创建基本的GameKit服务 391

12.1.1 GameKit蓝牙限制 391

12.1.2设备限制 392

12.1.3会话 392

12.1.4服务器、客户端、对等机 393

12.1.5对等机连接过程 393

12.1.6发送和接收数据 395

12.1.7状态更改 396

12.1.8创建GameKit辅助类 397

12.2秘诀:后台监控 402

12.3秘诀:通过GameKit发送复杂数据 403

12.4秘诀:GameKit语音聊天 405

12.4.1将GameKit作为中间人 405

12.4.2实现语音聊天 406

12.5秘诀:使用Bonjour创建iPhone服务器 407

12.6秘诀:为iPhone Bonjour服务创建Mac客户端 411

12.7秘诀:解决实际GameKit限制 414

12.7.1使用iPhone粘贴板 415

12.7.2存储数据 415

12.7.3检索数据 415

12.7.4可靠的粘贴板 415

12.8秘诀:通过BonjourHelper连接iPhone进行游戏 418

12.8.1注册Bonjour名称和端口 419

12.8.2双工连接 419

12.8.3读取数据 419

12.8.4关闭连接 419

12.9创建“在线”GameKit连接 426

12.10补充内容:扫描服务 428

12.11小结 431

第13章 网络连接 432

13.1秘诀:检查网络状态 432

13.2秘诀:为可达性扩展UIDevice类 433

13.3秘诀:扫描连接变化 436

13.4秘诀:重新获得IP和主机信息 439

13.5秘诀:检查站点可用性 441

13.6秘诀:同步下载 443

13.7秘诀:异步下载 445

13.8秘诀:应对身份验证的挑战 450

13.9秘诀:使用密钥链存储敏感数据 451

13.9.1密钥链包装器 451

13.9.2密钥链持久性 452

13.10秘诀:通过POST上传 453

13.11秘诀:上传数据 456

13.12秘诀:在应用程序之间共享密钥链 459

13.13秘诀:将XML转换为树 460

13.13.1构建解析树 461

13.13.2使用树结果 462

13.13.3分解树 464

13.14秘诀:构建一个简单的基于Web的服务器 465

13.15 补充内容:FTPHelper 468

13.16小结 469

第14章 设备能力 471

14.1秘诀:访问核心设备信息 471

14.2添加设备功能限制 472

14.3秘诀:重新获得更多设备信息 473

14.4秘诀:监控iPhone的电池状态 475

14.5秘诀:启用和禁用接近传感器 476

14.6秘诀:使用加速度将方向定位为“向上” 477

14.7秘诀:使用加速度移动屏幕上的对象 479

14.8秘诀:检测设备方向 481

14.9秘诀:利用运动事件检测晃动 482

14.10秘诀:直接从加速计检测晃动 484

14.11补充内容:检查可用的磁盘空间 487

14.12小结 487

第15章 音频、视频和媒体工具 488

15.1秘诀:使用AVAudioPlayer播放音频 488

15.1.1初始化音频播放器 488

15.1.2监控音量水平 489

15.1.3回放进度和拖曳播放 490

15.1.4捕获回放结束 490

15.2.秘诀:循环播放音频 494

15.3秘诀:处理音频中断 496

15.4秘诀:忽略休眠的音频 497

15.5秘诀:录制音频 499

15.6秘诀:使用音频队列录制音频 503

15.7秘诀:使用媒体播放器播放视频 508

15.8秘决:录制视频 510

15.9秘诀:选取和编辑视频 512

15.10秘诀:使用MPMediaPicker-Controller选取音频 514

15.11秘诀:创建媒体查询 517

15.11.1建立查询 517

15.11.2使用谓词 518

15.11.3解决速度问题 519

15.12秘诀:使用MPMusicPlayer-Controller 520

15.13补充内容:额外的电影播放器属性 524

15.14小结 524

第16章 推送通知 525

16.1推送通知简介 525

16.1.1推送技术的工作原理 526

16.1.2多个提供商支持 526

16.1.3安全 527

16.1.4推送的局限性 527

16.2准备推送 527

16.2.1生成一个应用程序标识符 528

16.2.2生成SSL证书 528

16.2.3推送服务特有的准备文件 530

16.3注册应用程序 530

16.3.1检索设备令牌 531

16.3.2处理令牌请求错误 532

16.3.3响应通知 532

16.4秘诀:推送客户端框架 533

16.5构建通知的有效内容 538

16.5.1本地化警告 539

16.5.2从字典转换为JSON 539

16.5.3自定义数据 540

16.5.4启动时接收数据 540

16.6秘诀:发送通知 541

16.7秘诀:实际使用推送服务 545

16.8反馈服务 549

16.9推送服务设计 550

16.10小结 550

第17章 使用Core Location和MapKit 552

17.1Core Location的工作原理 552

17.1.1 GPS定位 552

17.1.2 Skyhook Wi-Fi定位 552

17.1.3蜂窝基站定位技术 553

17.1.4因特网提供商定位技术 553

17.1.5混合使用这些方法 553

17.2秘诀:Core Location简介 554

17.3秘诀:跟踪速率 556

17.4秘诀:计算速率和距离 557

17.5秘诀:使用heading值跟踪北向 559

17.6秘诀:逆向地理编码 561

17.7秘诀:查看位置 562

17.8秘诀:用户位置注解 565

17.9秘诀:创建地图注解 567

17.9.1创建、添加和删除注解 568

17.9.2注解视图 568

17.9.3自定义注解视图 569

17.9.4响应注解按钮轻击事件 570

17.10补充内容:地理编码 574

17.11小结 577

第18章 连接地址簿 578

18.1秘诀:使用地址簿 578

18.1.1地址簿UI 578

18.1.2地址簿 578

18.1.3检索和设置ABRecord字符串 579

18.1.4简单的日期属性 581

18.1.5获取和设置多值记录属性 581

18.1.6地址和即时消息属性 584

18.1.7使用地址簿图像 586

18.1.8创建、添加和删除记录 586

18.1.9搜索联系人 587

18.1.10处理分组 588

18.1.11ABContact、ABGroup和ABContactsHelper 590

18.2秘诀:搜索地址簿 590

18.3秘诀:访问图像数据 592

18.4秘诀:选取人员 594

18.5秘诀:限制联系人选取器属性 595

18.6秘诀:添加新联系人 597

18.7秘诀:修改现有联系人 599

18.8秘诀:ABUnknownPersonView-Controller 600

18.9补充内容:添加随机的联系人拼图 602

18.10小结 604

第19章 使用Core Data 605

19.1Core Data简介 605

19.1.1创建和编辑模型文件 605

19.1.2生成头文件 606

19.1.3创建Core Data上下文 607

19.1.4添加对象 608

19.1.5查询数据库 610

19.1.6检测更改 611

19.1.7删除对象 611

19.2秘诀:将Core Data用作表格数据源 613

19.3秘诀:搜索表与Core Data 616

19.4秘诀:集成Core Data表与实时数据编辑 618

19.5秘诀:使用Core Data实现撤销-重做支持 620

19.6小结 622

第20章StoreKit:应用程序内购买 623

20.1 StoreKit入门 623

20.2创建测试账户 625

20.3创建应用程序内购买商品 625

20.3.1填写定价部分 626

20.3.2添加商品详细信息 627

20.3.3提交购买GUI屏幕截图 628

20.3.4开发人员批准 628

20.4提交应用程序 628

20.5构建GUI 629

20.6购买商品 631

20.6.1注销iTune账户以进行测试 631

20.6.2购买之后重新获得编程控制 631

20.6.3注册购买商品 632

20.6.4恢复购买商品 633

20.6.5购买多个商品 634

20.6.6处理注册购买过程中的延迟 634

20.7验证收据 634

20.8小结 636

第21章 辅助功能以及其他iPhone OS服务 637

21.1将VoiceOver辅助功能添加到应用程序 637

21.1.1 Interface Builder中的辅助功能 637

21.1.2在代码中使用辅助功能 639

21.1.3使用模拟器进行测试 640

21.1.4在iPhone上测试辅助功能 640

21.2秘诀:添加自定义设置包 641

21.2.1Settings应用程序 642

21.2.2避免敏感信息 643

21.2.3 Settings模式 643

21.2.4定义设置包 643

21.2.5设置和用户 647

21.2.6检查用户默认值 647

21.3秘诀:创建基于URL的服务 648

21.3.1使用URL模式 648

21.3.2服务缺点 648

21.3.3交叉促销 649

21.3.4注册模式:声明URL 649

21.3.5注册模式:添加处理程序方法 649

21.3.6使调用应用程序恢复控制 650

21.3.7实现自定义模式 651

21.4小结 652

附录A Info.plist密钥 653