SwiftData新增字段后,Xcode预览报错:
CrashReportError: Fatal Error in DataController.swift
piglet crashed due to fatalError in DataController.swift at line 18.
'try!' expression unexpectedly raised an error: SwiftData.SwiftDataError(_error: SwiftData.SwiftDataError._Error.loadIssueModelContainer)
使用真机运行报错:
piglet/DataController.swift:18: Fatal error: 'try!' expression unexpectedly raised an error: SwiftData.SwiftDataError(_error: SwiftData.SwiftDataError._Error.loadIssueModelContainer)
error: Store failed to load. <NSPersistentStoreDescription: 0x300ea2c10> (type: SQLite, url: file:///private/var/mobile/Containers/Shared/AppGroup/7851EC78-CD0A-4C04-ADFE-94FC6FDFCA03/Library/Application%20Support/PrivateDatabaseContainer.store) with error = Error Domain=NSCocoaErrorDomain Code=134060 "关键数据出错。" UserInfo={NSLocalizedFailureReason=CloudKit integration requires that all attributes be optional, or have a default value set.
问题原因在于,新增的字段没有默认值,因此无法兼容旧的模型/数据。
因为字段没有默认值,即使字段为可选类型,但是旧的模型/数据没有这个字段,无法识别新增字段,抛出错误。
解决方案:检查每一个字段,添加默认值。
@Model
class PiggyBank {
var isPrimary: Bool = false// 标记主要存钱罐
var name: String = "" // 存钱罐名称
var icon: String = "apple.logo" // 图标名称
var amount: Double = 0 // 存钱罐金额
var initialAmount: Double = 0 // 初始化金额,仅首次标记,用于后续展示
var targetAmount: Double = 1 // 目标金额
}
如果有一个字段缺失默认值,都会导致应用崩溃,这里必须做到详细检查。
