【SwiftUI】解决使用SwiftData时Preview报错failed to find a currently active container问题

@Model
public class SampleData{
    public var content:String?
}

let container: ModelContainer = {
    try! ModelContainer(
        for: SampleData.self
    )
}()

struct ContentView: View {

    @Query var datas: [SampleData]?
    ///......其他内容
}

#Preview {
    ContentView()
}

以上代码在Preview时会抛出异常:failed to find a currently active container for SampleData,但是真机运行没有异常。

解决方案:

修改PreView如下:

#Preview {
    MainActor.assumeIsolated {
        let container = container
        return ContentView()
               .modelContainer(container)
    }
}

 @MainActor
 let previewContainer: ModelContainer = {
    do {
        let container = try ModelContainer(
                for: SampleData,
                configurations: ModelConfiguration(isStoredInMemoryOnly: true)
            )
        let modelContext = container.mainContext
        if try modelContext.fetch(FetchDescriptor< SampleData >()).isEmpty {
            container.mainContext.insert(SampleData(content:"test"))
        }
        return container
    } catch {
        fatalError("Failed to create container")
    }
}()

#Preview {
    ContentView()
    .modelContainer(previewContainer)
}

参考:

https://developer.apple.com/forums/thread/731511

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容