SwiftUI 线程 1:致命错误:未找到类型为 SessionStore 的 ObservableObject
Posted
技术标签:
【中文标题】SwiftUI 线程 1:致命错误:未找到类型为 SessionStore 的 ObservableObject【英文标题】:SwiftUI Thread 1: Fatal error: No ObservableObject of type SessionStore found 【发布时间】:2021-02-22 19:21:59 【问题描述】:我正在创建一个包含 Firebase 的 SwiftUI 应用程序来启用登录帐户,非常简单。但是当我运行此代码时,出现以下错误“SwiftUI 线程 1:致命错误:未找到 SessionStore 类型的 ObservableObject。”调用 session.session 时弹出,你能告诉我这段代码的错误在哪里吗?谢谢大家
import UIKit
import SwiftUI
import Firebase
import Combine
struct ContentView: View
@EnvironmentObject var session: SessionStore
func getUser ()
session.listen()
var body: some View
VStack
if session.session != nil
LoginView()
else
TabView
ProfilView()
.tabItem
Label("Profil", systemImage: "person")
NotificationsView()
.tabItem
Label("Notifications", systemImage: "bell")
.onAppear(perform: getUser)
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView().environmentObject(SessionStore())
这里是 SessionStore 模型:
import Combine
import Foundation
import Firebase
final class User
@Published var uid: String
// var email: String?
@Published var displayName: String?
init(uid: String, displayName: String?)
self.uid = uid
// self.email = email
self.displayName = displayName
final class SessionStore: ObservableObject
@Published var session: User?
@Published var handle: AuthStateDidChangeListenerHandle?
func listen ()
// monitor authentication changes using firebase
handle = Auth.auth().addStateDidChangeListener (auth, user) in
if let user = user
// if we have a user, create a new user model
print("Got user: \(user)")
self.session = User(
uid: user.uid,
displayName: user.displayName
)
else
// if we don't have a user, set our session to nil
self.session = nil
【问题讨论】:
您需要将 SessionStore 添加为 EnvironmentObject。 显示你在哪里初始化ContentView()
——它需要有.environmentObject()
和会话存储
谢谢@jnpdx ????????????
@jnpdx 看来您的信息解决了问题,请将其发布为答案。
【参考方案1】:
您需要在实例化ContentView
的任何位置包含.environmentObject(SessionStore())
:
ContentView().environmentObject(SessionStore())
这需要在使用 ContentView
的任何地方发生(例如,在预览和实际应用层次结构本身中,例如来自 SceneDelegate
或 WindowGroup
,如果您使用的是 SwiftUI 视图生命周期)。
【讨论】:
以上是关于SwiftUI 线程 1:致命错误:未找到类型为 SessionStore 的 ObservableObject的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 致命错误:未找到“”类型的 ObservableObject
SwiftUI 错误未找到 GlobalEnvironment 类型的 ObservableObject