由于环境对象设置不正确,我的预览画布崩溃了。 应用程序本身可以正常构建并运行。
错误信息。
app crashed due to missing environment of type: TaskModel. To resolve this add .environmentObject(TaskModel(...)) to the appropriate preview.
带有 #Preview 宏的我的视图如下所示。
struct CopyTaskListScreen: View {
@EnvironmentObject private var taskModel: TaskModel
var body: some View {
NavigationStack {
List(taskModel.tasks.sorted(by: <), id: \.key) { task in
Text(task.value.title)
}
}
}
}
#Preview {
CopyTaskListScreen()
.environmentObject(TaskModel(//how to call TaskDataService here?))
}
我的任务模型如下所示。我使用 ITaskData 协议注入 TaskDataService。 TaskDataService 接受所有实现 ITaskData 协议的数据适配器并将其交给我的 TaskModel。
@MainActor
class TaskModel: ObservableObject {
@Published var tasks: [UUID: Task] = [:]
var data: TaskDataService
init(data: ITaskData) {
self.data = TaskDataService(data: data)
readTasks()
}
我尝试在#Preview 中注入环境,就像在@main 中一样。但结果相同。预览画布崩溃了。
@main
struct mTaskApp: App {
var body: some Scene {
WindowGroup {
MainScreen()
.environmentObject(TaskModel(data: TaskDataService(data: RemindersDataAdapter())))
通常您的服务将是一个 EnvironmentKey,例如
@Environment(\.taskDataService) var taskDataService
@EnvironmentObject private var taskModel: TaskModel
并且会像这样使用它
.task {
await taskDataService.load(into: taskModel)
}
那么在预览中它将是:
#Preview {
CopyTaskListScreen()
.environment(\.taskDataService, MockTaskDataService())
.environmentObject(TaskModel())
}