SwiftData新增字段后报错 ‘try!’ expression unexpectedly raised
SwiftData新增字段后报错 ‘try!’ expression unexpectedly raised

SwiftData新增字段后报错 ‘try!’ expression unexpectedly raised

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  // 目标金额
}

如果有一个字段缺失默认值,都会导致应用崩溃,这里必须做到详细检查。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注