You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为SwiftData Model新增Bool属性导致应用崩溃求助

解决方案

1. 删除自动生成的自定义Getter代码

你看到的这段自动生成代码是崩溃的直接诱因:

{
    get {
        _drill.wrappedValue
    }
}

@Query作为SwiftData的属性包装器,已经内置了属性值的处理逻辑,手动添加自定义getter会干扰其内部工作流程,直接删除这段代码即可。

修改后的Query代码应恢复为:

@Environment(\.modelContext) var context
@Query(sort: [SortDescriptor(\Note.isCompleted), SortDescriptor(\Note.title)]) var drill: [Note]

2. 为新增的isWorking属性添加默认值

SwiftData要求所有模型属性必须有明确的初始化方式,Bool类型如果没有默认值,会导致查询时无法正确初始化模型实例,引发崩溃。给isWorking添加默认值:

@Model
class Note {
    var id: UUID
    @Attribute(.unique) var title: String
    var drillDescrip: String
    var gamePractice: String
    var selfnotes: String
    var isCompleted: Bool
    var isWorking: Bool = false // 添加默认值
}

也可以在模型的初始化器中为isWorking赋值,确保每个实例创建时该属性都有明确值。

3. 确认Schema迁移配置(可选)

如果上述步骤仍未解决问题,检查ModelContainer的初始化代码,确保指定了正确的schema版本和迁移策略。例如:

let container = try ModelContainer(
    for: Note.self,
    configurations: ModelConfiguration(
        schemaVersion: 3,
        migrationPlan: NoteMigrationPlan.self // 确保迁移计划包含SchemaV3的定义
    )
)

如果是直接使用新Schema(删除应用后),可以暂时移除迁移配置,让SwiftData直接创建新的数据库:

let container = try ModelContainer(
    for: Note.self,
    configurations: ModelConfiguration(isStoredInMemoryOnly: false)
)

4. 彻底清理应用数据

  • 删除模拟器中的应用
  • 清理Xcode的Derived Data:Xcode > 设置 > 位置 > Derived Data > 点击箭头打开文件夹后删除对应项目的文件夹
  • 重新编译运行应用

内容的提问来源于stack exchange,提问作者MAdelman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:45:06