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

使用SwiftData时UI预览编译失败,主线程隔离变量无法引用

SwiftData预览报错 'main actor-isolated let "modelTestContainer" can not be referenced from a non-isolated context' 解决办法

错误原因

你给modelTestContainer添加了@MainActor修饰符,这意味着该变量只能在主线程(Main Actor)隔离的上下文中访问。但#Preview的闭包默认运行在非隔离上下文里,直接引用主线程隔离的变量就会触发这个权限错误。

两种可行的解决方法

方法一:给预览闭包标记@MainActor

直接将#Preview的闭包声明为主线程隔离,这样就能合法访问modelTestContainer:

#Preview {
    @MainActor in
    Overview()
        .modelContainer(modelTestContainer)
}

方法二:在预览内部创建隔离的测试容器

如果不想修改整个预览闭包的隔离属性,也可以在预览内部单独创建测试容器,并确保数据插入操作在主线程执行:

#Preview {
    do {
        let container = try ModelContainer(
            for: Interest.self, ModelConfiguration(inMemory: true)
        )
        // 主线程中插入测试数据,避免上下文冲突
        MainActor.run {
            for interest in InterestSample.seed {
                container.mainContext.insert(object: interest)
            }
        }
        return Overview()
            .modelContainer(container)
    } catch {
        return Text("预览容器创建失败:\(error.localizedDescription)")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:13:17