使用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
相关产品推荐
相关产品推荐

