《macOS应用开发基础教程》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:赵君卫,张帆著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2018
  • ISBN:9787115486400
  • 页数:586 页
图书介绍:本书对Mac平台中应用开发的AppKit系统控件做了详细的介绍,并给出示例进行说明;从开发软件的常用公用组件、系统框架、生产力工具开发等方面做了进一步的阐述和探讨。最后介绍了几个小型项目的demo开发过程的关键代码和开发思路,力求让读者从基础知识、方法论、项目实践等多纬度去理解和掌握Mac平台的App开发。

第1章 准备工作 1

1.1 Mac电脑 1

1.2 Xcode使用介绍 1

1.2.1 Xcode工作区 2

1.2.2 xib界面设计相关的工作区和菜单 3

1.3 工程结构 5

1.3.1 使用xib方式创建的工程 5

1.3.2 使用storyboard方式创建的工程 11

第2章 窗口对象 13

2.1 窗口界面的组成 14

2.2 模态窗口 16

2.2.1 模态窗口 16

2.2.2 模态会话窗口 16

2.3 编程控制窗口 17

2.3.1 创建窗口对象 17

2.3.2 窗口通知 18

2.3.3 NSWindow的contentView 18

2.3.4 设置窗口的image和titl 19

2.3.5 设置窗口的背景颜色 19

2.3.6 关闭窗口时终止应用 19

2.3.7 在窗口标题区域增加视图 20

2.3.8 NSWindow如何正确地保证居中显示 21

2.3.9 窗口显示位置控制 21

2.3.10 应用关闭后点击Dock菜单再次打开应用 21

2.4 窗口的创建和管理 21

第3章 视图和滚动条 23

3.1 基本视图 23

3.1.1 坐标系统 23

3.1.2 frame和bounds 24

3.1.3 坐标转换 25

3.1.4 视图管理 25

3.1.5 视图查找 25

3.1.6 视图的autoSize控制 25

3.1.7 视图的layer属性 27

3.1.8 视图绘制 27

3.1.9 事件响应 28

3.1.10 视图的frame/bounds变化通知 28

3.2 增效视图 29

3.3 滚动条视图 31

3.3.1 滚动条视图工作原理 31

3.3.2 用代码创建滚动条视图 32

3.3.3 滚动到指定的位置 32

3.3.4 用代码实现文本视图滚动的示例 33

3.3.5 滚动条的显示控制 34

第4章 基本控件 35

4.1 控件的分类 35

4.2 控件家族类图谱 35

4.2.1 NSResponder 37

4.2.2 NSView 38

4.2.3 NSControl 38

4.2.4 NSCell 38

4.2.5 小结 39

4.3 文本框 39

4.3.1 UI属性说明 40

4.3.2 事件响应 40

4.3.3 文本内容的读取或修改 41

4.3.4 特殊按键响应处理 41

4.4 文本视图 42

4.4.1 UI属性说明 42

4.4.2 事件响应 43

4.4.3 文本的格式化显示 43

4.4.4 文本框高度根据文字高度自适应增长 44

4.5 文本搜索框 44

4.6 文本标签 46

4.6.1 UI属性说明 46

4.6.2 用代码创建文本标签 46

4.7 按钮 48

4.7.1 UI属性说明 48

4.7.2 事件响应 48

4.7.3 连接事件 49

4.7.4 用代码创建按钮 49

4.7.5 图片按钮的创建 49

4.8 复选框 50

4.8.1 UI属性说明 51

4.8.2 事件响应 51

4.9 单选按钮 51

4.9.1 UI属性说明 51

4.9.2 事件响应 52

4.10 分段选择控件 52

4.10.1 UI属性说明 53

4.10.2 事件响应 53

4.10.3 分段大小的控制 53

4.10.4 分段样式风格的控制 53

4.11 组合框 54

4.11.1 UI属性说明 54

4.11.2 事件响应 55

4.11.3 动态增加列表内容 55

4.11.4 使用数据源和代理 55

4.12 弹出式按钮 56

4.12.1 UI属性说明 56

4.12.2 动态列表项配置 56

4.12.3 事件响应 57

4.13 滑杆 57

4.13.1 属性设置 57

4.13.2 水平和垂直方向设置 57

4.13.3 事件绑定 58

4.14 日期选择器 58

4.14.1 UI属性说明 58

4.14.2 获取日期 59

4.14.3 日期变化的事件 59

4.15 步进器 59

4.15.1 UI属性说明 60

4.15.2 事件响应 60

4.15.3 文本框数据与步进器保持同步 60

4.16 进度指示器 60

4.16.1 UI属性说明 61

4.16.2 启动指示器动画 61

4.16.3 更新指示器进度 61

4.16.4 停止指示器动画 61

4.16.5 用代码创建进度指示器 62

4.17 图像视图 62

4.17.1 UI属性说明 62

4.17.2 圆角处理 62

4.18 分组框 63

4.18.1 UI属性说明 63

4.18.2 用代码创建分组框 63

4.19 分栏视图 64

4.19.1 重要属性和方法说明 64

4.19.2 用代码创建分栏视图 65

4.19.3 自定义分栏视图样式风格 65

4.19.4 分栏视图中的子视图控制 66

4.19.5 分栏视图子视图的隐藏和显示 68

4.20 集合视图 68

4.20.1 集合视图的content 69

4.20.2 NSCollectionViewItem 69

4.20.3 绑定模型到视图 70

4.20.4 使用数据源方式管理集合视图 71

4.20.5 实现集合视图的高亮选择 73

4.20.6 集合视图的背景设置 75

4.20.7 集合视图的布局管理器 75

4.20.8 设置集合视图的顶部头和底部尾 77

4.20.9 用代码创建集合视图 79

4.21 选项卡视图 79

4.21.1 UI属性说明 80

4.21.2 代理协议NSTabViewDelegate 80

4.21.3 动态增加选项卡 80

4.21.4 用无边风格的选项卡进行切换控制 81

4.22 弹出式气泡 82

4.22.1 重要属性 82

4.22.2 使用示例 83

第5章 面板和警告框 84

5.1 面板 84

5.1.1 UI属性说明 85

5.1.2 显示面板 85

5.1.3 隐藏面板 86

5.1.4 文件打开面板 86

5.1.5 文件保存面板 88

5.1.6 颜色选择面板 88

5.1.7 字体选择面板 89

5.2 警告框 89

5.2.1 UI属性说明 89

5.2.2 添加按钮 90

5.2.3 使用示例 90

5.3 使用独立的xib文件创建面板类 91

第6章 工具栏和菜单 94

6.1 工具栏 94

6.1.1 创建工具栏 94

6.1.2 UI属性说明 95

6.1.3 NSToolbarItem的属性说明 96

6.1.4 事件响应 96

6.1.5 创建非标准的工具栏项 97

6.1.6 验证工具栏项 97

6.1.7 用代码创建工具栏 98

6.1.8 工具栏与窗口控制按钮融合显示 99

6.2 菜单 99

6.2.1 UI属性说明 100

6.2.2 增加菜单 101

6.2.3 弹出式菜单 101

6.2.4 设置上下文菜单 102

6.2.5 Dock菜单 102

6.2.6 用代码创建菜单 103

6.2.7 获取应用默认的菜单 104

6.2.8 菜单有效性验证 104

6.3 状态条 105

6.3.1 NSStatusBar类的对象关系 105

6.3.2 NSStatusBar的使用方式 105

6.3.3 状态条增加弹出视图 107

第7章 表视图 109

7.1 表视图 109

7.1.1 使用xib创建表格 109

7.1.2 表格样式设置 112

7.1.3 表格数据显示配置 112

7.1.4 表格事件 119

7.1.5 创建表格上下文菜单 120

7.1.6 数据排序 120

7.1.7 数据拖放 121

7.1.8 表格数据获取 121

7.1.9 编辑表格内容 121

7.1.10 动态增加/删除表格行 122

7.1.11 用代码创建表格 123

7.1.12 代码控制选中行 125

7.1.13 表格行选中颜色定制 126

7.2 大纲视图控件 126

7.2.1 节点模型定义 127

7.2.2 初始化模型数据 128

7.2.3 实现数据源协议 128

7.2.4 实现代理方法,绑定数据到节点视图 129

7.2.5 节点选择的变化事件通知 129

7.2.6 动态增加节点 130

7.2.7 动态删除节点 130

7.2.8 代码控制行的展开和选中 131

7.2.9 修改节点展开关闭的默认图标 132

7.2.10 鼠标右键上下文菜单 133

第8章 自动布局 134

8.1 自动布局的原理 134

8.1.1 传统的布局 134

8.1.2 自动布局 135

8.2 栈视图 137

8.3 Xcode中的自动布局设置 138

8.3.1 Stack 139

8.3.2 Align 140

8.3.3 Pin 140

8.3.4 Resolve 141

8.4 自动布局的多种解决方案 141

8.4.1 一个问题的多种解决方案 142

8.4.2 约束选择的原则和建议 144

8.5 自动布局使用示例 144

8.5.1 两个视图大小相同 144

8.5.2 3个View大小相同 145

8.5.3 文本标签和输入框 145

8.5.4 文本标签动态字体和输入框 146

8.5.5 多行文本标签和输入框 146

8.5.6 多行文本标签动态字体和输入框 147

8.5.7 两个视图大小相同、水平方向的间距相同 148

8.5.8 简单的Stack View 149

8.5.9 复杂界面未使用栈视图 150

8.5.10 复杂界面使用多个嵌套栈视图 151

8.6 滚动条视图使用自动布局 151

8.7 通过代码设置自动布局约束 153

8.7.1 使用NSLayoutConstraint类 153

8.7.2 使用NSLayoutAnchor 155

8.7.3 使用VFL定义约束关系 155

8.7.4 使用第三方库AutoLayoutX 155

第9章 窗口控制器 157

9.1 xib中窗口的加载创建过程 157

9.2 手工创建窗口需要注意的问题 160

9.3 窗口控制器和窗口的关系 161

9.4 将AppDelegate中窗口的管理功能分离 161

9.5 窗口切换后对象失去焦点问题 163

第10章 视图控制器 164

10.1 视图控制器 164

10.1.1 视图生命周期过程 165

10.1.2 创建视图控制器的3种方式 166

10.1.3 representedObject属性 167

10.1.4 子视图控制器管理 168

10.1.5 两个视图控制器之间的切换方法 169

10.1.6 Storyboard中的视图控制 172

10.1.7 视图中手势识别 174

10.2 选项卡控制器 175

10.2.1 使用NSTabView创建选项卡视图 175

10.2.2 使用NSTabViewController管理选项卡视图 176

10.2.3 使用Storyboard方式创建 176

10.2.4 选项卡选中事件 177

10.3 分栏视图控制器 178

10.3.1 控制器的几个重要的属性和方法 178

10.3.2 NSSplitViewItem 179

10.3.3 NSSplitView 179

10.3.4 使用Storyboard创建分栏视图控制器 179

10.3.5 用代码创建分栏视图控制器 180

10.3.6 可折叠的视图控制 181

10.4 视图控制器与窗口控制器的关系 183

10.4.1 视图与窗口 183

10.4.2 视图控制器与窗口控制器 183

10.4.3 不依赖xib和storyboard,纯代码实现应用 184

10.5 使用窗口控制器和视图控制器实现简单登录流程 186

10.5.1 登录流程的基本工程实现 186

10.5.2 代码控制启动的控制器 190

10.5.3 登录页面使用效果美化 190

10.5.4 登录页面纯代码实现 192

10.5.5 整个工程纯代码实现 195

10.6 滚动条视图高级用法 195

10.6.1 滚动条视图显示多个按钮 195

10.6.2 滚动条视图处理分页滑动 199

第11章 鼠标和键盘事件 206

11.1 事件的分发过程 206

11.2 事件中的两个核心类 207

11.2.1 NSResponder 207

11.2.2 NSEvent 207

11.3 鼠标事件 208

11.3.1 鼠标点击 208

11.3.2 鼠标拖放 209

11.3.3 鼠标区域跟踪 210

11.3.4 模拟鼠标点击选中 212

11.4 键盘事件 213

11.4.1 快捷键 213

11.4.2 控制键 214

11.5 按键绑定事件 215

11.5.1 系统绑定的按键事件 215

11.5.2 文字输入 216

11.6 事件监控 218

11.7 动作消息 218

11.8 在视图控制器中处理事件 219

第12章 撤销/重做操作 220

12.1 撤销/重做流程分析 220

12.2 实现原理 222

12.3 撤销/重做动作的管理 223

12.3.1 NSUndoManager的创建 223

12.3.2 注册撤销动作 223

12.3.3 清除撤销动作 224

12.3.4 禁止注册撤销动作 224

12.3.5 撤销动作命名 224

12.3.6 撤销组 224

12.4 撤销栈的深度 224

12.5 撤销/重做通知消息 225

12.6 撤销/重做编程示例 225

第13章 拖放操作 227

13.1 拖放开始 227

13.1.1 拖放数据定义 227

13.1.2 拖放的可视化图像设置 229

13.1.3 拖放源事件 229

13.1.4 拖放源协议NSDraggingSource 230

13.2 拖放接收 231

13.2.1 注册接收的拖放类型 231

13.2.2 拖放目标方协议 231

13.2.3 拖放接收方处理过程 231

13.3 拖放端到端编程 232

13.3.1 拖放源类DragSourceView 232

13.3.2 拖放目标类 233

13.3.3 视图控制器中拖放源初始化 235

13.4 常见的拖放示例 236

13.4.1 文件拖放处理 236

13.4.2 表格视图的拖放处理 237

13.4.3 大纲视图的数据拖放处理 239

第14章 Cocoa数据绑定 243

14.1 KVC 243

14.1.1 KVC属性读写接口 244

14.1.2 KVC路径访问相关接口 244

14.1.3 批量属性访问接口 244

14.2 KVO 245

14.2.1 KVO相关接口 245

14.2.2 手工管理KVO 246

14.2.3 KVO的简单例子 247

14.3 KVB 248

14.3.1 传统的数据更新流程 249

14.3.2 使用绑定技术简化更新流程 249

14.3.3 实现绑定依赖的关键点 252

14.3.4 KVB绑定的处理流程 253

14.3.5 使用NSArrayController管理数据 254

14.3.6 使用NSTreeController管理数据 256

第15章 蓝牙框架 261

15.1 蓝牙数据交换流程 261

15.2 蓝牙框架中的相关类 262

15.2.1 外围设备相关 263

15.2.2 数据中心相关 263

15.2.3 服务相关 263

15.2.4 特征值相关 263

15.3 外围设备的工作流程 263

15.3.1 系统初始化上电 263

15.3.2 创建服务 264

15.3.3 创建特征值 264

15.3.4 服务与特征值关联 264

15.3.5 发布服务 264

15.3.6 广播服务 265

15.3.7 数据读写请求 265

15.3.8 订阅请求处理 266

15.4 数据中心工作流程 266

15.4.1 系统初始化上电 266

15.4.2 搜索外围设备 267

15.4.3 建立连接 267

15.4.4 查询服务 267

15.4.5 查询服务特征值 267

15.4.6 服务特征读请求 268

15.4.7 服务特征值写 268

15.4.8 服务订阅 269

第16章 Bonjour协议 270

16.1 Bonjour服务命名规则 271

16.2 Bonjour协议API栈 271

16.3 Bonjour核心流程 271

16.3.1 服务发布 272

16.3.2 服务发现 272

16.3.3 地址解析 273

16.4 Bonjour编程 273

16.4.1 服务发布 273

16.4.2 服务发现 274

16.4.3 直接使用Bonjour进行数据发送 274

16.4.4 需要注意的问题 275

第17章 系统服务 276

17.1 服务处理流程 277

17.2 服务定义 277

17.3 服务提供方编程 279

17.3.1 实现服务功能接口 279

17.3.2 声明服务 280

17.3.3 注册服务 281

17.3.4 测试服务功能 281

17.4 服务使用方编程 282

17.4.1 注册数据类型 282

17.4.2 菜单有效性校验 282

17.4.3 发送数据到剪贴板 283

17.4.4 从剪贴板读取结果数据 283

第18章 XPC服务 284

18.1 XPC架构 284

18.2 XPC编程实现 285

18.2.1 XPC服务接口对象 285

18.2.2 XPC服务方编程 285

18.2.3 XPC服务请求方编程 287

18.2.4 XPC服务接口反向调用 288

第19章 消息推送 290

19.1 本地消息通知 290

19.1.1 注册本地消息通知 290

19.1.2 实现本地消息代理协议方法 291

19.1.3 取消本地通知 291

19.1.4 程序控制发送消息通知 292

19.2 远程消息通知 292

19.2.1 推送消息的处理流程 292

19.2.2 请求消息推送注册 293

19.2.3 设备 293

19.2.4 推送消息接收 293

19.2.5 提供者消息发送 294

19.2.6 消息格式 294

19.2.7 Feedback服务 295

19.2.8 消息推送环境的证书配置 295

19.2.9 推送消息的发送 296

第20章 多文档应用 298

20.1 文档应用中的关键对象 298

20.1.1 文档控制器 298

20.1.2 文档模型 299

20.1.3 文档窗口控制器 299

20.2 创建基于文档的工程 299

20.2.1 Document Types 300

20.2.2 Exported UTIs 301

20.2.3 文档编程模板工程 301

20.3 wrapper方式读取文件 303

20.3.1 创建NSFile Wrapper管理文件 304

20.3.2 从NSFileWrapper实例读取内容 304

20.3.3 支持NSFileWrapper文件的工程配置 305

20.3.4 完整的FileWrapper工程示例 305

20.4 文档处理流程 309

20.4.1 新建文档流程 309

20.4.2 打开文档流程 309

20.4.3 保存文档流程 310

20.4.4 导出文件流程 310

20.5 文档应用开发步骤 310

20.6 文档应用中的撤销/重做支持 311

20.7 文档应用管理个人档案 312

20.7.1 个人档案数据模型 312

20.7.2 文档数据以普通文件方式存储 313

20.7.3 文档数据以wrapper方式存储 316

第21章 iCloud同步 320

21.1 容器 320

21.2 iCloud数据存储 321

21.2.1 iCloud文档数据处理流程 321

21.2.2 iCloud文档本地目录 323

21.3 键值存储 324

21.3.1 键值存储接口 324

21.3.2 键值存储限制 324

21.3.3 键值存储数据变化通知 325

21.3.4 键值存储处理流程 325

21.4 iCloud开发前准备工作 325

21.5 容器数据在多个App间共享 327

21.5.1 键值存储数据的App间共享访问 327

21.5.2 文档数据的App间共享访问 328

21.6 数据冲突 328

21.6.1 键值数据冲突 328

21.6.2 文档类型数据冲突 328

第22章 CIoudKit 329

22.1 使用 Dashboard后台管理数据 330

22.2 容器共享 332

22.3 创建记录结构 333

22.4 CloudKit数据操作 334

22.4.1 保存数据 334

22.4.2 删除数据 336

22.4.3 查询数据 336

22.4.4 数据关联reference 337

22.4.5 批量查询数据操作 337

22.5 订阅数据变化通知 338

22.5.1 创建订阅 338

22.5.2 注册消息推送 338

22.6 生产环境部署 339

第23章 Core Data 340

23.1 Core Data对象栈 341

23.2 在项目中使用Core Data 341

23.2.1 数据增加 345

23.2.2 数据删除 346

23.2.3 数据修改 346

23.2.4 数据查询 346

23.3 模型间关系 347

23.3.1 一对一 347

23.3.2 一对多 348

23.3.3 多对多 348

23.4 使用Bindings绑定管理对象 350

23.5 撤销/重做操作的支持 353

23.6 版本升级迁移 354

23.6.1 轻量级迁移 354

23.6.2 基于模型映射的迁移 357

第24章 HTTP网络编程 360

24.1 简单的数据请求 361

24.1.1 使用系统默认方式创建URLSession 361

24.1.2 使用自定义的代理方法创建URLSession 362

24.1.3 创建URLSession使用POST方式传递数据 363

24.2 文件下载 364

24.2.1 创建下载任务 364

24.2.2 实现下载代理协议 364

24.3 文件上传 365

24.3.1 流式文件上传客户端代码编写 365

24.3.2 表单文件上传客户端代码编写 366

24.4 缓存 368

24.5 Cookie管理 369

24.5.1 Cookie编程 370

24.5.2 Cookie的一些使用场景 370

24.6 断点续传 371

24.7 基于URLSessionDataTask封装的网络处理工具类 372

24.7.1 网络处理工具类实现分析 372

24.7.2 HTTPClient工具类实现 373

第25章 多线程 377

25.1 GCD 377

25.1.1 分发队列 377

25.1.2 GCD多线程编程 378

25.1.3 GCD实际使用的例子 382

25.2 OperationQueue 384

25.2.1 BlockOperation 384

25.2.2 Operation 385

25.2.3 设置任务间的依赖 386

25.2.4 设置Operation执行完的回调 387

25.2.5 取消任务 387

25.2.6 暂停或恢复队列的执行 387

25.2.7 任务执行的优先级 387

25.3 Thread 388

25.3.1 线程创建方式 388

25.3.2 Thread类中的关键方法和属性 389

25.3.3 线程中的共享资源保护 390

第26章 事件循环 393

26.1 RunLoop的模式 393

26.2 RunLoop类 394

26.3 RunLoop的活动状态 395

26.4 定时器 396

26.5 RunLoop中的输入源 397

26.6 RunLoop事件处理流程 398

26.7 RunLoop使用场景 398

第27章 绘图技术 399

27.1 绘图上下文 399

27.2 坐标系统 399

27.2.1 笛卡儿坐标 399

27.2.2 屏幕坐标与本地坐标 400

27.2.3 坐标变换 400

27.3 颜色与透明度 403

27.3.1 颜色模型和颜色空间 403

27.3.2 创建颜色 403

27.3.3 在绘图上下文中使用颜色 404

27.3.4 从系统颜色面板获取颜色的方式 404

27.4 绘图状态 405

27.5 图像 406

27.5.1 图像内部缓存 406

27.5.2 图像大小 406

27.5.3 图像的坐标系统 406

27.5.4 图像绘制方法 407

27.5.5 图像创建或加载 407

27.5.6 屏幕图像的捕获 408

27.5.7 图像的格式转换 409

27.6 阴影和渐变 409

27.6.1 阴影 409

27.6.2 渐变 410

27.7 文本绘制 413

27.7.1 文本属性参数 413

27.7.2 Suing的绘制方法 413

27.8 使用路径绘图 414

27.8.1 路径的样式 415

27.8.2 点 418

27.8.3 线 418

27.8.4 多边形 418

27.8.5 矩形 418

27.8.6 圆角矩形 419

27.8.7 圆和椭圆 419

27.8.8 弧形 419

27.8.9 贝塞尔曲线 420

27.9 绘图的性能优化 420

第28章 核心动画 422

28.1 动画的产生过程 422

28.2 层 423

28.2.1 视图和层 423

28.2.2 层的坐标系统 424

28.2.3 层的时间系统 425

28.2.4 层的对象树 425

28.2.5 层级管理方法 426

28.2.6 层的内容 426

28.2.7 层的深度 427

28.2.8 层的透视投影 427

28.3 层动画 428

28.3.1 隐式动画 428

28.3.2 显式动画 429

28.4 核心动画对象 430

28.4.1 动画相关类 431

28.4.2 协议 433

28.4.3 辅助类 435

28.4.4 事务 436

28.5 动画的控制 437

28.5.1 隐式动画的产生过程 437

28.5.2 隐式动画的动作定义 438

28.5.3 动画结束通知 438

28.5.4 动画的暂停和恢复 439

28.6 macOS中的属性动画 439

28.6.1 属性动画 440

28.6.2 动画上下文对象 440

28.6.3 自动布局动画 441

28.7 系统动画与核心动画的对比 441

28.8 动画编程示例 442

28.8.1 关键帧动画 442

28.8.2 分组动画 444

28.8.3 转场动画 444

28.9 动画性能 445

28.10 系统专有层 446

28.10.1 渐变层 446

28.10.2 形状层 447

28.10.3 文本层 448

28.10.4 分片层 448

28.10.5 副本层 449

28.10.6 发射层 450

28.10.7 变换层 452

第29章 多代理 455

29.1 多代理与代理和通知的比较 455

29.1.1 代理方式实现 455

29.1.2 通知 456

29.1.3 多代理 456

29.2 多代理的实现 457

29.2.1 Objective-C中多代理实现技术 457

29.2.2 使用消息转发机制进行优化 457

29.2.3 XMPPFramework 458

29.3 聊天列表示例 459

29.3.1 主要的视图控制器 459

29.3.2 联系人模型类 460

29.3.3 多代理管理类 460

29.3.4 多代理的注册 461

29.3.5 多代理的通知 462

第30章 数据转换 464

30.1 转换器基类 465

30.2 系统实现的转换器 465

30.3 绑定中使用的转换器 466

30.3.1 类型转换器的实现和注册 466

30.3.2 实现模型类 467

30.3.3 绑定Combo Box控件到模型类 468

30.4 实现自定义转换器的步骤 469

30.5 使用转换器分离数据转换逻辑 469

第31章 框架 471

31.1 框架与静态库 471

31.2 创建框架工程 471

31.2.1 接口定义 471

31.2.2 头文件引用声明 472

31.2.3 使用框架 473

31.2.4 框架的加载路径 476

31.2.5 框架的签名问题 478

第32章 应用沙盒化 479

32.1 macOS沙盒机制 479

32.2 应用沙盒配置信息 479

32.3 文件沙盒编程 481

32.3.1 设计界面 481

32.3.2 App启动处理 481

32.3.3 打开文件处理流程 482

32.3.4 保存文件 483

32.3.5 应用沙盒配置 483

32.3.6 作用域安全的书签 484

32.3.7 保存打开的文件URL的书签 484

32.3.8 应用启动时通过URL的书签获取文件授权 484

第33章 数据导航视图 487

33.1 DataNavigationItem的设计 487

33.1.1 DataNavigationItem基类 488

33.1.2 DataNavigationButtonItem 488

33.1.3 DataNavigationTextItem 488

33.1.4 DataNavigationFlexibleItem 489

33.2 DataNavigationView接口和属性 489

33.2.1 接口 489

33.2.2 内部属性 489

33.3 DataNavigationView代码实现 490

33.3.1 item配置 490

33.3.2 创建视图 491

33.3.3 自动布局 492

33.3.4 更新文本视图的方法 494

33.4 使用DataNavigationView 494

第34章 表格数据管理控制器 497

34.1 表格列的动态配置 497

34.1.1 表列定义的模型 498

34.1.2 NSTableColumn类的扩展 499

34.1.3 NSTableView类的扩展 499

34.1.4 代码动态配置表列的表数据导航控制器 500

34.2 实现用代码创建的表格和用xib创建表格的兼容 504

34.3 表格的数据代理 505

34.3.1 数据集管理操作接口 505

34.3.2 数据源实现 507

34.3.3 动态创建表格内容的数据代理方法 507

34.3.4 表内容的编辑处理 511

34.3.5 TableDataDelegate的使用 512

34.4 数据列排序 513

34.5 数据行拖放交换顺序 514

34.6 数据分页显示控制 515

34.6.1 分页控制器 515

34.6.2 分页导航视图 517

34.6.3 分页数据获取 519

34.7 表格数据的增删编辑操作 519

34.7.1 增加数据 519

34.7.2 删除数据 520

34.7.3 编辑表数据 521

第35章 自动化小工具 522

35.1 图片资源适配自动化工具 522

35.1.1 实现思路 522

35.1.2 工程实现 524

35.2 国际化 527

35.2.1 App语言国际化的过程 527

35.2.2 自动化的思路 530

35.2.3 Xcode工程文件的编辑和修改 531

第36章 iPhone利用蓝牙控制Mac 534

36.1 控制的主要流程分析 534

36.2 macOS服务器端 535

36.2.1 XXXPeripheralService服务类 535

36.2.2 macOS端界面开发 537

36.2.3 Mac锁屏状态通知 538

36.2.4 控制Mac电脑的系统命令和脚本 539

36.2.5 macOS端接收iOS端的命令处理 540

36.3 iOS控制端 541

36.3.1 XXXCentralClient类 541

36.3.2 iOS界面开发 543

第37章 SQLite数据库编程 546

37.1 FMDB介绍 546

37.2 数据库操作接口封装 548

37.2.1 数据库管理对象 548

37.2.2 数据访问对象 549

37.2.3 MDAO对象 551

37.2.4 数据模型对象 552

37.2.5 具体使用 553

37.3 数据库加密 554

37.3.1 获取支持加密的SQLite3版本 554

37.3.2 加密数据库 555

37.3.3 操作加密数据库 556

37.4 获取SQLite元数据 556

37.5 模板引擎 559

37.5.1 Xcode中的模板 560

37.5.2 模板引擎处理流程 560

37.6 表模型自动化代码生成 561

37.6.1 模板文件定义 561

37.6.2 代码实现 562

第38章 开发一个完整的macOS应用 564

38.1 制定目标 564

38.2 开发自己的应用 564

38.3 主界面设计 564

38.3.1 主窗口控制器 565

38.3.2 分栏页面控制器 566

38.3.3 左边导航列表页的设计与实现 567

38.3.4 分栏右部界面 570

38.3.5 详细界面设计 571

38.4 工具栏设计 572

38.5 菜单设计 574

38.5.1 系统菜单 574

38.5.2 上下文菜单 575

38.6 应用偏好设置 577

38.7 页面控制器的核心流程 578

38.8 用户体验的一点改进 582

38.9 发布应用准备 583

38.9.1 发布到非应用商店渠道 583

38.9.2 发布到应用商店 584

后记 586