【问题标题】:Thread 1: Fatal error: No ObservableObject of type UserStore found. A View.environmentObject(_:)线程 1:致命错误:未找到 UserStore 类型的 ObservableObject。一个 View.environmentObject(_:)
【发布时间】:2023-03-03 05:04:20
【问题描述】:

我在 SwiftUI 中遇到问题。当我尝试启动我的模拟器时,发生了错误。 模拟器启动良好,但几秒钟后出现错误消息:

Fatal error: No ObservableObject of type UserStore found. A View.environmentObject(_:) for
UserStore may be missing as an ancestor of this view.: file SwiftUI, line 0 2020-05-05
13:08:36.521073+0200 PLAN.YOUR.TRIP[55476:1340155] Fatal error: No ObservableObject of type
UserStore found. A View.environmentObject(_:) for UserStore may be missing as an ancestor
of this view.: file SwiftUI, line 0
(lldb) 

这来自我使用另一个名为 UserStore 的文件将我的项目连接到 Firebase 的文件,这就是发生错误的地方:

 if user.showLogin { //     <--- RIGHT HERE

            ZStack {
                LoginView(showLogin: $showLogin)

                VStack {
                    HStack {

                        Spacer()

                        Image(systemName: "xmark.circle")
                            .resizable()
                            .frame(width: 36, height: 36)
                            .foregroundColor(Color(.systemGray6))
                            .background(Color.gray.opacity(0.5))
                            .clipShape(Circle())
                            .padding()
                            .onTapGesture {
                                self.user.showLogin = false
                        }
                    }
               }
          }

该错误表明存在问题“未找到 UserStore 类型的 ObservableObject”,但我创建了一个名为“UserStore”的文件,其中包含以下内容:

import SwiftUI
import Combine

class UserStore: ObservableObject {
    @Published var isLogged = false
    @Published var showLogin = false
    @Published var showReg = false
}

并将其链接到我在其中使用 @EnvironmentObject 的其他文件,如下所示:

struct Home: View {
    @State var showProfile = false
    @EnvironmentObject var user: UserStore
    @State var showLogin = false
    @State var showReg = false

我无法理解这个错误,因为这个完全相同的代码昨天还在工作,但我试图卸载一个名为“Hero”的扩展,该扩展在我的项目中未使用,并且有人建议我将我的代码更新为 swift 5,这是我所做的,但在此之后出现了许多其他错误。我决定用完全相同的结构和文件重新创建一个项目,用相同的代码(没有“Hero pod”)重新安装可可豆荚,并且捆绑包 ID 是相同的,所以这不是 Firebase 和我的项目之间的问题.. .

我知道这里的内容是重复的,但我在其他所有论坛中都没有找到适合我的内容。

对不起,我的英语不是最好的......

请帮忙。谢谢

【问题讨论】:

  • 你是如何创建Home的?正如错误消息非常清楚地指出的那样,您需要在其上调用.environmentObject 以注入user

标签: ios swift swiftui


【解决方案1】:

在您创建Home 实例的所有地方,即。做Home(),你必须改为使用

Home().environmentObject(UserStore())

【讨论】:

  • 其实你不需要在初始化之后直接调用.environmentObject。您只需要确保在您第一次访问或呈现 Home 之前调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
相关资源
最近更新 更多