macOS套用開發基礎教程

macOS套用開發基礎教程

《macOS套用開發基礎教程》是2020年3月人民郵電出版社出版的圖書,作者是趙君衛、張帆。

基本介紹

  • 書名:macOS套用開發基礎教程
  • 作者:趙君衛、張帆
  • ISBN:9787115486400
  • 頁數:586頁
  • 定價:108元
  • 出版社:人民郵電出版社
  • 出版時間:2020年3月
  • 裝幀:平裝
  • 開本:16開
內容簡介,圖書目錄,

內容簡介

本書是Swift版本的macOS套用開發教程。本書全面介紹和說明了macOS平台中套用開發的系統控制項,詳細闡述和探討了套用開發的常用組件、系統框架、套用沙盒處理、上架流程、生產力工具開發等內容,並配有豐富的示例講解。書中還介紹了幾個小型的演示項目,剖析了開發過程、開發思路舉牛拔去和關鍵流程歡拜市代碼,力求讓讀者從基礎知識和項目實踐等多個維度去理解和掌握macOS平台的套用開發。
本書立足普及基本的macOS套用開發知識,力求每個知識點的講解都簡明扼要,並通過代碼示例演示讓讀者儘快學以致用,非常適合macOS套用開發的初學者閱讀。但是,本書中並沒有介紹Swift的基礎語法,閱讀本書需要讀者了解Swift的知識。

圖書目錄

第 1章 準備工作 1
1.1 Mac電腦 1
1.2 Xcode使用介紹 1
1.2.1 Xcode工作區 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和title 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 滾動到zhi定的位置 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 滾動條視圖gao級用法 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 創建NSFileWrapper管理檔案 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章 CloudKit 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 String的繪製方法 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的書籤獲取檔案shou權 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
3.3.3 滾動到zhi定的位置 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 滾動條視圖gao級用法 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 創建NSFileWrapper管理檔案 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章 CloudKit 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 String的繪製方法 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的書籤獲取檔案shou權 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

相關詞條

熱門詞條

聯絡我們