第1章 什么是Cocoa 1
1.1 历史简介 1
1.2 开发工具 3
1.3 语言 4
1.4 对象、类、方法和消息 4
1.5 框架 6
1.6 怎样阅读这本书 6
1.7 常见错误 7
1.8 怎样学习 8
第2章 起步 9
2.1 Xcode 9
新建一个项目 10
main函数 12
2.2 Interface Builder 13
Library窗口 14
空白窗口 14
布局界面 15
指示窗口 17
创建一个类 17
创建一个对象 19
建立连接 20
2.3 回到XCode 23
Objective-C中的类型和常量 23
查看头文件 24
编辑定义文件 25
编译运行 27
awakeFromNib 28
2.4 文档 29
2.5 你做了什么 30
第3章 Objective-C语言 33
3.1 创建、使用对象 33
3.2 使用已有的类 35
给nil发送消息 40
NSObject、NSArray、NSMutableArray和NSString 41
继承和组合 45
3.3 建自己的类 46
创建LotteryEntry类 46
修改lottery.m 49
实现description方法 50
编写Initializers(初始化器) 55
带参数的Initializer 56
3.4 调试器 58
3.5 补充知识:消息机制工作原理是什么 62
3.6 挑战 63
第4章 内存管理 65
4.1 开关垃圾收集器 66
4.2 使用Garbage Collection 68
4.3 使用Retain计数 68
实现dealloc 71
创建自动释放对象 72
Accessor方法 74
4.4 你完成了什么 77
第5章 Target/Action 79
5.1 一些常用的NSControl子类 81
NSButton 81
NSSlider 82
NSTextField 83
5.2 开始SpeakLine例子 85
5.3 Nib文件的布局 86
使用Interface Builder建立连接 87
NSWindow的initialFirstResponder Outlet 88
5.4 实现AppController类 88
5.5 补充知识:通过代码来设置target 90
5.6 挑战 90
5.7 调试建议 92
第6章 Helper对象 95
6.1 委托 96
6.2 NSTableView和它的dataSource 99
6.3 布局用户界面 102
6.4 创建连接 103
6.5 修改AppController.m 105
实现委托时的常见错误 107
对象委托 107
6.6 补充知识:委托是如何工作的 108
6.7 挑战:创建一个委托 109
6.8 挑战:创建一个数据源 110
第7章 Key-Value Coding;Key-Value Observing 111
7.1 Key-Value Coding 111
7.2 绑定 113
7.3 Key-Value Observing 115
7.4 让Keys可被观察 116
7.5 Properties和它们的Attributes 118
@property和@synthesize 118
一个Property的Attributes 119
7.6 补充知识:Key Paths 120
7.7 补充知识:Key-value Observing 121
第8章 NSArrayController 123
8.1 开始写RaiseMan应用 124
在Xcode中 125
在Interface Builder中 128
8.2 Key-Value Coding和nil 132
8.3 添加排序 133
8.4 补充知识:不使用NSArrayController排序 134
8.5 挑战一 135
8.6 挑战二 135
第9章 NSUndoManager 139
9.1 NSInvocation 139
9.2 NSUndoManager如何工作 140
9.3 给RaiseMan添加撤销 142
9.4 Key-Value Observing 145
9.5 撤销修改 146
9.6 插入操作后立刻开始编辑 149
9.7 补充知识:窗口和撤销管理器 151
第10章 Archiving 153
10.1 NSCoder和NSCoding 154
编码 154
解码 156
10.2 文档架构 157
Info.plist和NSDocumentController 157
NSDocument 158
NSWindowController 161
10.3 保存和NSKeyedArchiver 161
10.4 载入和NSKeyedUnarchiver 162
10.5 为文件类型设置文件扩展名和图标 163
10.6 补充知识:防止死循环 166
10.7 补充知识:创建一个Protocol 167
10.8 补充知识:不带撤销的Document-Based Application 167
10.9 统一类型标识符 168
第11章 Core Data基本原理 171
11.1 NSManagedObjectModel 171
11.2 Interface 173
创建并配置View 175
连接和绑定 177
11.3 Core Data是怎么工作的 180
第12章 Nib文件和NSWindowController 183
12.1 NSPanel 183
12.2 给程序添加一个Panel 184
设置菜单项 186
AppController.m 187
Preferences.nib 188
PreferenceController.m 192
12.3 补充知识:NSBundle 194
12.4 挑战 195
第13章 User Default 197
13.1 NSDictionary和NSMutableDictionary 198
NSDictionary 198
NSMutableDictionary 199
13.2 NSUserDefaults 200
不同类型的defaults的优先级 201
13.3 设置程序的标识符 202
13.4 命名Defaults中的键 202
13.5 注册Defaults 203
13.6 让用户编辑defaults 203
13.7 使用Defaults 205
禁止生成Untitled Documents 205
设置表格视图的背景颜色 206
13.8 补充知识:NSUserDefaultsController 207
13.9 补充知识:使用Command line来读写Defaults 207
13.10 挑战 208
第14章 使用Notifications 209
14.1 什么是Notification 209
14.2 Notifications不是什么 210
14.3 NSNotification和NSNotificationCenter 210
14.4 发送一个Notification 212
14.5 注册成为Observer 213
14.6 处理接受到的Notification 214
14.7 UserInfo字典 214
14.8 补充知识:Delegates和Notifications 215
14.9 挑战 216
第15章 使用Alert Panels 217
15.1 让用户确认删除 218
15.2 挑战 221
第16章 本地化 223
16.1 nib文件的本地化 224
16.2 字符串表 226
创建字符串表 227
使用字符串表 229
16.3 补充知识:ibtool 230
16.4 补充知识:格式化字符串中符号的顺序 231
第17章 自定义视图 233
17.1 View的层次 233
17.2 让View绘制自己 235
创建一个View子类的对象 236
大小检查 237
drawRect 238
17.3 使用NSBezierPath绘制 240
17.4 NSScrollView 242
17.5 通过程序创建View 245
17.6 补充知识:单元格 245
17.7 补充知识:isFlipped 247
17.8 挑战 248
第18章 Image和鼠标事件 249
18.1 NSResponder 249
18.2 NSEvent 249
18.3 获取鼠标事件 251
18.4 使用NSOpenPanel 251
修改nib文件 252
编辑代码 255
18.5 在View中合成一个图像 256
18.6 View的坐标系统 258
18.7 Autoscrolling 261
18.8 补充知识:NSIMage 261
18.9 挑战 262
第19章 键盘事件 263
19.1 NSResponder 265
19.2 NSEvent 265
19.3 创建一个带有自定义View的项目 266
界面布局 266
建立连接 267
编写代码 270
19.4 补充知识:Rollovers 274
19.5 毛边的蓝色框 275
第20章 绘制带属性的文本 277
20.1 NSFont 277
20.2 NSAttributedString 278
20.3 绘制字符串和属性字符串 280
20.4 显示字母 281
20.5 让你的View生成PDF数据 283
20.6 补充知识:NSFontManager 286
20.7 挑战1 286
20.8 挑战2 286
第21章 粘贴板和Nil-Targeted Actions 287
21.1 粘贴板 288
21.2 给BigLetterView添加剪切、复制和粘贴 289
21.3 Nil-Targeted Actions 290
如何搜索响应链 291
查看Nib文件 292
21.4 补充知识:哪个对象发送了Action消息 293
21.5 补充知识:延迟复制 293
21.6 挑战1 294
21.7 挑战2 294
第22章 Categories 295
22.1 给NSString添加一个方法 295
22.2 补充知识:声明私有方法 297
22.3 补充知识:Protocol的非正式写法 297
第23章 拖放 299
23.1 让BigLetterView成为一个拖动源 300
23.2 让BigLetterView成为拖动目的地 303
registerForDraggedTypes 304
添加高亮 304
实现Dragging-Destination方法 305
测试 306
23.3 补充知识:Operation Mask 307
第24章 NSTimer 309
24.1 界面布局 311
24.2 创建连接 312
24.3 添加代码到AppController 314
24.4 补充知识:NSRunLoop 316
24.5 挑战 316
第25章 工作表 317
25.1 添加一个工作表 318
添加Outlet和Action 319
界面布局 319
添加代码 323
25.2 补充知识:contextInfo 324
25.3 补充知识:模式窗口 325
第26章 创建NSFormatter 327
26.1 一个基本格式化器 328
新建ColorFormatter.h 329
修改Nib文件 329
NSColorList 331
在字符串里搜索子字符串 332
实现基本格式化器的方法 332
26.2 NSControl的委托 334
26.3 检查部分字符串 335
26.4 让格式化器返回Attributed字符串 337
第27章 打印 339
27.1 处理分页 339
27.2 补充知识:现在是输出到屏幕上么 344
27.3 挑战 344
第28章 Web Service 345
28.1 AmaZone 346
28.2 界面布局 347
28.3 写代码 349
28.4 挑战:添加一个WebView 353
第29章 视图切换 355
29.1 设计 356
开始 356
创建ManagedViewController类 357
创建ViewControllers和它们的NIB文件 358
添加视图切换到MyDocument 360
29.2 调整窗口大小 362
第30章 Core Data Relationships 365
30.1 编辑模型 365
30.2 创建自定义NSManagedObject类 366
Employee 367
Department 368
30.3 界面布局 369
DepartmentView.nib 369
EmployeeView.nib 371
30.4 事件和nextResponder 372
第31章 垃圾收集 375
31.1 非对象的数据类型 376
C的原始类型 376
Core Foundation 377
31.2 多项式示例 377
31.3 Instruments 383
31.4 补充知识:弱引用 385
31.5 挑战:试错 385
第32章 Core Animation 387
32.1 创建CALayer 388
32.2 使用CALayer和CAAnimation 390
移除Polynomials 392
同时移动多个层 393
调整层大小并重绘 393
CALayer 394
第33章 一个简单的Cocoa/OpenGL应用程序 397
33.1 使用NSOpenGLView 397
33.2 写程序 398
界面布局 399
写代码 402
第34章 NSTask 405
34.1 多线程对多进程 405
34.2 ZIPspector 406
34.3 异步读取 410
34.4 iPing 411
34.5 挑战:.tar和.tgz文件 415
第35章 结束 417
35.1 挑战 418
索引 419