第 18 课2026.09.24
场景存储中的路径数据无法解码时,避免每次显示页面都重复尝试同一损坏值。
第 18 课:损坏的导航数据回退到根页
- 日期:2026-09-24
- 课程序号:第 18 课
- 知识点:恢复失败时清理无效场景数据
用途或适用场景
场景存储中的路径数据无法解码时,避免每次显示页面都重复尝试同一损坏值。
核心概念
解码失败后清除 savedPath 并保持根路径;可恢复数据仍只由 @SceneStorage 保存,当前导航仍由 path 持有。
最小代码或操作示例
swift
// 替换第 17 课 LessonView 中的 restorePath(),其余代码不变。
private func restorePath() {
guard let savedPath else { return }
do {
let value = try JSONDecoder().decode(
NavigationPath.CodableRepresentation.self, from: savedPath
)
path = NavigationPath(value)
} catch {
self.savedPath = nil
path = NavigationPath()
}
}3~5 分钟练习
暂把 savedPath 设成无法解码的 Data([0]),再调用恢复方法。
参考答案
解码失败后 savedPath 被清空,path 为空,界面回到根页;下一次打开不会重复使用坏数据。
与上一课的联系
沿用第 17 课的自动保存、savedPath 和 restorePath();本课只新增解码失败时的明确清理分支;完成后下一课可为清理动作增加可观测日志。
时效校验
时效校验:2026-09-24(Apple 当前 NavigationPath 与 SceneStorage 官方 API;组合示例沿用上一课最低 iOS 17 / macOS 14,未见废弃标记)。