这门课补的是「退出应用后数据还在哪」的缺口
很多 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)





