第1章 踏上新征程 1
1.1本书讲什么 1
1.2你需要具备的基础 2
1.3启程前的准备 2
1.4本书主要内容 4
第2章Core Data剖析 6
2.1 Core Data简史 6
2.2创建Core Data应用程序 7
2.3 Core Data概念和术语 11
2.4数据模型 11
2.5 Managed Object 21
2.6键—值(Key-Value)编程 21
2.7 Managed Object上下文 22
2.8小结 33
第3章 完美的开端:添加、显示和删除数据 34
3.1建立Xcode项目 35
3.1.1添加场景 39
3.1.2场景和导引线 40
3.1.3 Storyboard文档大纲 40
3.2应用程序架构 41
3.3设计视图控制器界面 42
3.4创建HeroListController 45
3.4.1创建Connection和Outlets 47
3.4.2导航栏按钮 49
3.4.3标签栏User Defaults 51
3.5设计数据模型 53
3.5.1添加一个实体 53
3.5.2编辑新实体 53
3.5.3为Hero实体添加属性 55
3.6声明Fetched Results Controller 59
3.7实现Fetched Results Controller 60
3.8 Fetched Results Controller的Delegate方法 61
3.9一切就绪 63
3.9.1错误处理 63
3.9.2实现Edit和Add 63
3.9.3为表格视图数据源和Delegate编写代码 64
3.9.4表格视图排序 65
3.9.5运行时载入Fetch Request 66
3.10跑起来吧 66
3.11完成,但还要继续 67
第4章 隐藏在详情视图中的“怪兽” 68
4.1视图实现方案选择 68
4.2创建详情视图控制器 70
4.2.1接通导引线 72
4.2.2 HeroDetailController 73
4.3详情视图中的挑战 74
4.4使用Property列表控制表格结构 75
4.5使用Property列表搭建表格结构模型 76
4.6通过Property列表定义表格视图 77
4.7解析Property列表 80
4.8显示详情 82
4.9编辑详情 84
4.10详情视图的编辑模式 84
4.11创建自定义UITableViewCell子类 86
4.12保存修改 89
4.13专门的输入视图 90
4.13.1 DatePicker SuperDBEditCell子类 90
4.13.2使用DatePicker SuperDBEditCell子类 92
4.13.3实现一个选择器 94
4.14“怪兽”的终结 97
第5章 为变化做准备:迁移和版本控制 98
5.1关于数据模型 99
5.1.1数据模型会被编译 99
5.1.2数据模型可以拥有多个版本 100
5.1.3创建新版数据模型 101
5.1.4当前数据模型版本 102
5.1.5数据模型版本标识符 103
5.2迁移 103
5.2.1轻量VS标准 103
5.2.2标准迁移 104
5.3为轻量迁移设置应用 104
5.4让我们迁移吧 105
第6章 自定义管理对象 106
6.1更新数据模型 108
6.1.1添加Age属性 109
6.1.2添加“最喜爱颜色”属性 109
6.1.3为name属性指定最小长度 110
6.2创建Hero类 111
6.2.1修改Hero的Header 113
6.2.2设置默认值 113
6.3校验 114
6.3.1单属性校验 115
6.3.2 nil vs.NULL 116
6.3.3多属性校验 117
6.4虚拟Accessor 118
6.5添加校验反馈 118
6.6更新详情视图 120
6.7重构SuperDBEditCell 122
6.7.1 Xcode重构选项 122
6.7.2搬移代码 124
6.7.3可编辑Property 126
6.8创建Color表格视图单元格 127
6.8.1自定义颜色编辑器 127
6.8.2自定义Color表格视图单元格 129
6.9清除选择器 132
6.10还有一件事 135
6.11前路更多彩 138
第7章 关系、属性获取和表达式 139
7.1扩展你的应用程序:“超能力”和“英雄榜” 139
7.2关系 141
7.2.1对一关系 142
7.2.2对多关系 142
7.2.3逆关系 144
7.2.4 Fetched Properties 145
7.2.5在数据模型编辑器中创建关系和Fetched Properties 145
7.2.6删除规则 146
7.3表达式和融合 146
7.4添加“超能力”实体 147
7.5创建Power关系 148
7.6创建逆关系 149
7.7创建olderHeros Fetched Property 149
7.8创建youngerHeros Fetched Property 151
7.9创建sameSexHeroes Fetched Property 151
7.10创建opposite SexHeroes Fetched Property 151
7.11向Hero类添加关系和Fetched Properties 152
7.12修改详情视图 152
7.12.1重新思考配置 154
7.12.2封装和信息隐藏 157
7.12.3数据驱动配置 159
7.12.4添加“超能力” 160
7.13重构详情视图控制器 165
7.13.1重命名Configuration类 165
7.13.2重构详情控制器 167
7.13.3重构Hero实例变量 167
7.13.4再抽象一点 167
7.13.5新的HeroDetail Controller 169
7.14“超能力”视图控制器 171
7.15Fetch Properties 174
7.16和Core说再见 177
第8章 在云端 178
8.1使用iCloud进行数据存储 178
8.2 iCloud基础 178
8.3 iCloud Backup 179
8.4在应用程序中启用iCloud 180
8.5键—值数据存储 180
8.6文档存储 181
8.6.1 UIDocument 181
8.6.2支持iCloud的UIDocument 185
8.6.3 NSMetadataQuery 185
8.7支持iCloud的Core Data 187
8.8升级SuperDB 189
8.8.1 Entitlements 189
8.8.2创建启用iCloud的Provisioning Profile 190
8.8.3修改Persistent Store 198
8.8.4修改Managed Object上下文 200
8.8.5收到DataChanged通知时更新UI 201
8.8.6测试数据存储 202
8.8.7“脚踏实地” 202
第9章 使用Game Kit进行蓝牙点对点通信 203
9.1 Game Center 203
9.2点对点连接 204
9.3 In Game Voice 205
9.4本章的应用程序 205
9.5网络通信模型 208
9.5.1客户端—服务器模型 208
9.5.2点对点模型 209
9.5.3客户端—服务器与点对点混合 209
9.6 Game Kit中的Session 210
9.6.1创建Session 210
9.6.2查找并连接到其他Session 211
9.6.3监听其他的Session 211
9.6.4向连接点发送数据 212
9.6.5信息打包发送 213
9.6.6从连接点接收数据 213
9.6.7关闭连接 214
9.7 Peer Picker 214
9.7.1创建Peer Picker 214
9.7.2处理连接 215
9.7.3创建Session 215
9.8创建项目 216
9.8.1关闭待机计时器 216
9.8.2导入Game Kit框架 216
9.8.3设计界面 217
9.8.4定义应用程序常量 217
9.8.5设计棋盘 219
9.8.6创建数据包对象 221
9.8.7搭建视图控制器头 223
9.9内测 234
9.10游戏开始 235
第10章Map Kit 236
10.1本章的应用程序 236
10.2概览和术语 237
10.3地图视图 238
10.3.1地图类型 238
10.3.2用户所在位置 239
10.3.3坐标区域 239
10.3.4设定显示区域 241
10.3.5地图视图Deleate 241
10.4标注 243
10.4.1标注对象 243
10.4.2标注视图 244
10.4.3添加和移除标注 244
10.4.4选中标注 244
10.4.5提供带有标注视图的地图视图 245
10.5地理编码和反向地理编码 246
10.6搭建MapMe应用程序 247
10.6.1链接Map Kit和Core Location框架 247
10.6.2构建界面 248
10.6.3实现视图控制器接口 249
10.6.4实现标注对象类 249
10.6.5实现MapMe的ViewController 251
10.7升级啦,年轻人 256
第11章 消息:邮件、短信和社交媒体 257
11.1本章的应用程序 257
11.2 MessageUI框架 259
11.2.1创建邮件编写视图控制器 260
11.2.2填写标题行 260
11.2.3填写收件人 260
11.2.4设置邮件正文 261
11.2.5添加附件 261
11.2.6显示邮件编写视图 261
11.2.7 邮件编写视图控制器的Delegate方法 261
11.2.8消息编写视图控制器 262
11.3 Social框架 263
11.3.1 SLComposeViewController 263
11.3.2 SLRequest 264
11.4活动视图控制器 265
11.5构建MessageImage应用程序 266
11.5.1构建用户界面 266
11.5.2拍照 266
11.5.3调用照相机 267
11.5.4选择消息发送器 267
11.6寄往:下一章 268
第12章 媒体库访问和播放 269
12.1 MediaPlayer框架 269
12.1.1媒体项 270
12.1.2媒体项集合 274
12.1.3媒体查询和媒体属性Predicate 275
12.1.4媒体选择控制器 277
12.1.5音乐播放控制器 279
12.2简单的音乐播放器 283
12.2.1构建SimplePlayer应用程序 283
12.2.2构造用户界面 284
12.2.3声明Outlet和Action 286
12.3 MPMoviePlayerController 291
12.4 MPMediaPlayer 292
12.5 AVFoundation 302
12.6 AVMediaPlayer 303
12.7小心!前方有洪水 327
第13章 加把锁:iOS安全 328
13.1安全性考量 328
13.2安全性技术 329
13.2.1加密 329
13.2.2散列 329
13.2.3证书和签名 330
13.2.4身份 330
13.3 iOS安全性 330
13.3.1随机Keychain 331
13.3.2证书、密钥和受信服务 335
13.4 Keychain Viewer 336
13.4.1创建Certificate Authority 336
13.4.2创建Keychain应用 340
13.5安全不打烊 361
第14章 保持界面响应 362
14.1探索并发问题 363
14.2创建Stalled应用程序 364
14.2.1设计界面 364
14.2.2实现Stalled视图控制器 364
14.3 Timer 367
14.3.1创建Timer 367
14.3.2停止Timer 368
14.3.3 Timer的局限性 368
14.4使用Timer修改Stalled应用程序 368
14.4.1创建Batch对象 368
14.4.2修改nib 370
14.4.3修改视图控制器头文件 370
14.4.4修改视图控制器的实现文件 371
14.5操作队列和并发 373
14.5.1线程 374
14.5.2操作 379
14.5.3操作队列 381
14.6使用操作队列优化Stalled应用程序 382
14.6.1创建SquareRootApplication 383
14.6.2自定义ProgressCell 386
14.6.3调整用户界面 386
14.6.4修改ViewController.h 387
14.6.5修改ViewController.m 387
14.7排队站好 392
第15章 单元测试、调试和相关工具 393
15.1单元测试 393
15.2调试 401
15.2.1断点 402
15.2.2 Debug Navigator 404
15.2.3 Debug Area 405
15.2.4尝试Debug Control 406
15.2.5 Breakpoint Navigator和Symbolic断点 409
15.2.6条件断点 409
15.2.7断点行为 411
15.2.8静态分析 413
15.2.9有关调试的补充 413
15.3使用Instruments进行性能分析 414
15.4胜利的终点线 416
第16章 路在脚下 417
16.1逃离困境 417
16.2苹果提供的文档 418
16.3邮件列表 418
16.4论坛 418
16.5网站 418
16.6博客 419
16.7如果一切都失败了 419
16.8再见 419