这门课补的是「退出应用后数据还在哪」的缺口

很多 iOS 初学者写到列表页、表单页时,数据在内存里都好好的,一杀掉应用重开就全没了。你可能会想:文件存到手机本地不就行了吗?但真动手才发现,iOS 应用不能随便往任意目录写文件,每个 App 有自己的沙盒目录,里面又分 Documents、Library、tmp 等不同区域,各有各的用途和备份策略。选错目录,数据可能被系统清理掉,或者被 iCloud 备份弄得莫名其妙。这门课就是解决这个问题的:它不讲网络、不讲 UI 动画,专门聚焦 iOS 上最基础也最常用的本地持久化方式——属性列表(Property List),也就是用 plist 文件保存数据,并带你把一个实际应用重构为「启动后能从本地恢复数据」的版本。

课程的核心内容围绕两条线展开:一条线讲清楚沙箱目录的结构,解释为什么必须用 NSHomeDirectory() 这类 API 去定位目录,而不是写死路径;另一条线讲属性列表文件与集合类型的对应关系,重点落在 NSArray 和 NSDictionary 的读写方法上。如果你之前只会在代码里创建数组和字典,没想过它们还能直接整体写入文件、再从文件完整读回来,那么这部分正好补上这个认知。

适合什么基础,建议先看哪几块

这门课面向的是已经会用 Swift 写基本语法、能搭建简单界面、但还没系统接触过 iOS 文件系统的学习者。不需要先学过数据库或 Core Data,只要用过 Xcode 创建过 Single View Application,理解 App 的启动流程和 viewDidLoad 这类生命周期回调就够了。如果你连 Swift 里的可选型和数组字典都还不熟,建议先回去补基础语法,再来看这门课,否则在代码里容易卡壳。

如果时间有限,不必按顺序从头看到尾。建议优先看这三块:第一块是「沙箱目录」的概述,这是理解后面所有代码的前提,花二十分钟把三个目录各自的用途和边界搞清楚;第二块是「集合与属性列表文件对应关系」以及 NSArray、NSDictionary 的读写方法,这是动手写代码的直接依据;第三块是 MyNotes 应用的初始化重构实例,虽然标题叫「初始化」,实际是把前面讲的目录定位、plist 读写组合成一个完整的、能跑通的应用启动恢复流程。中间的直播答疑可以放到最后,有疑问时再回头看。

学完能独立做什么,资料怎么配合练

学完这门课,你应该能独立实现一个轻量级的本地存储功能:比如做一个待办事项 App,用户新增的条目在应用退出后不丢失;或者做一个笔记应用,启动时自动加载之前保存的内容。你能说清楚「数据应该放在哪个目录」「为什么用 plist 而不是直接写一个 txt 文件」「数组和字典在写入文件时各自对应什么格式」这类问题。更进一步,你也会明白这种方式的边界在哪里——当数据量大、结构复杂或需要查询时,plist 就不够用了,那时才该考虑 SQLite 或 Core Data。这个认知本身就是一种能力:知道什么场景用什么工具。

练习时不要只看视频里敲代码,建议准备一个你自己的最小 Demo,不要照抄 MyNotes,而是换一个主题,比如「记录每天喝水杯数」或「收藏的网址列表」。先照着课程把沙箱目录打印出来,用代码写一个字典到 plist,再读出来展示到界面上。做完这一步,再去把课程里的 MyNotes 重构跟着做

课程目录

1-1 [10.1 概述] 10.1.2概述-持久化方式 (11:02)
1-2 [10.1 概述] 10.1.1概述-沙箱目录 (20:17)
1-3 [10.1 概述] 20150508第十四期直播答疑_上 (34:25)
1-4 [10.1 概述] 20150508第十四期直播答疑_下 (01:05:20)
2-1 [10.2 属性列表] 10.2.1 集合与属性列表文件对应关系 (12:02)
2-2 [10.2 属性列表] 10.2.2 NSArray相关方法 (13:19)
2-3 [10.2 属性列表] 10.2.3 NSDictionary相关方法 (05:36)
2-4 [10.2 属性列表] 10.2.4 实例:重构MyNotes应用1(初始化) (16:15)
2-5 [10.2 属性列表] 10.2.4 实例:重构MyNotes应用2(初始化) (16:42)
2-6 [10.2 属性列表] 10.2.4 实例:重构MyNotes应用3(查询所有数据) (13:53)
2-7 [10.2 属性列表] 10.2.4 实例:重构MyNotes应用4(按照主键查询数据) (06:14)
2-8 [10.2 属性列表] 10.2.4 实例:重构MyNotes应用5(插入数据) (04:37)
2-9 [10.2 属性列表] 10.2.4 实例:重构MyNotes应用6(删除和更新数据) (04:49)
3-1 [10.3 对象归档] 10.3.1 对象归档相关类 (08:03)
3-2 [10.3 对象归档] 10.3.2 NSData相关方法 (04:52)
3-3 [10.3 对象归档] 10.3.3 实例:重构MyNotes应用1(业务领域对象Note实现NSCoding) (07:41)
3-4 [10.3 对象归档] 10.3.3 实例:重构MyNotes应用2(初始化数据归档) (12:02)
3-5 [10.3 对象归档] 10.3.3 实例:重构MyNotes应用3(查询所有数据) (05:08)
3-6 [10.3 对象归档] 10.3.3 实例:重构MyNotes应用4(按照主键查询数据) (02:24)
3-7 [10.3 对象归档] 10.3.3 实例:重构MyNotes应用5(插入数据) (04:06)
3-8 [10.3 对象归档] 10.3.3 实例:重构MyNotes应用6(删除和更新数据) (03:28)
4-1 [10.4 使用SQLite数据库] 10.4 使用SQLite数据库介绍 (02:07)
4-2 [10.4 使用SQLite数据库] 10.4.1使用SQLite数据库-SQLite数据类型 (04:31)
4-3 [10.4 使用SQLite数据库] 10.4.2使用SQLite数据库-创建数据库-1 (14:20)
4-4 [10.4 使用SQLite数据库] 10.4.2使用SQLite数据库-创建数据库-2 (13:26)
4-5 [10.4 使用SQLite数据库] 10.4.2使用SQLite数据库-创建数据库-3 (02:31)
4-6 [10.4 使用SQLite数据库] 10.4.2使用SQLite数据库-创建数据库-4 (04:27)
4-7 [10.4 使用SQLite数据库] 10.4.3 查询数据(按照主键查询数据) (06:13)
4-8 [10.4 使用SQLite数据库] 10.4.3 查询数据(查询所有数据)-1 (13:48)
4-9 [10.4 使用SQLite数据库] 10.4.3 查询数据(查询所有数据)-2 (14:05)
4-10 [10.4 使用SQLite数据库] 10.4.4 插入数据-1 (02:49)
4-11 [10.4 使用SQLite数据库] 10.4.4 插入数据-2 (02:48)
4-12 [10.4 使用SQLite数据库] 10.4.5 删除数据和更新数据-1 (01:26)
4-13 [10.4 使用SQLite数据库] 10.4.5 删除数据和更新数据-2 (05:25)
5-1 [10.5 Core Data] 10.5.1 ORM对象关系映射 (14:40)
5-2 [10.5 Core Data] 10.5.2 Core Data堆栈 (16:43)
5-3 [10.5 Core Data] 10.5.3 建模和生成实体-建模 (08:13)
5-4 [10.5 Core Data] 10.5.3 建模和生成实体-生成实体 (06:23)
5-5 [10.5 Core Data] 10.5.4 实例:采用Core Data分层架构设计MyNotes (08:12)
5-6 [10.5 Core Data] 10.5.5 实例:MyNotes建模和生成实体 (21:13)
5-7 [10.5 Core Data] 10.5.6 实例:MyNotes查询数据 (15:36)
5-8 [10.5 Core Data] 10.5.7 实例:MyNotes主键查询数据 (06:33)
5-9 [10.5 Core Data] 10.5.8 实例:MyNotes数据插入 (06:13)
5-10 [10.5 Core Data] 10.5.9 实例:MyNotes数据删除 (02:43)
5-11 [10.5 Core Data] 10.5.10 实例:MyNotes数据更新 (02:06)