【发布时间】:2021-10-24 05:13:13
【问题描述】:
线程 1:致命错误:未找到 Session 类型的 ObservableObject。 Session 的 View.environmentObject(_:) 作为该视图的祖先可能会丢失。
我目前正在开发一个使用 Firebase 进行身份验证的 SwiftUI 应用程序。如果用户未登录,我想将他们带到登录页面,如果他们已登录,我希望他们转到正确的应用程序视图。这采用带有几个选项卡的 WindowGroup 的形式。
因为我有用户,所以我有一个会话存储的概念,它可以跟踪当前用户的会话。相当简单的类。
let auth = Auth.auth()
@Published var signedIn = false
var isSignedIn: Bool {
return auth.currentUser != nil
}
func login(email: String, password: String) {
auth.signIn(withEmail: email, password: password) { [weak self] res, err in
guard res != nil, err == nil else {
return
}
DispatchQueue.main.async {
self?.signedIn = true
}
}
}
func register(email: String, password: String) {
auth.createUser(withEmail: email, password: password) { [weak self] res, err in
guard res != nil, err == nil else {
return
}
DispatchQueue.main.async {
self?.signedIn = true
}
}
}
}
在尝试运行我的应用程序时,我收到以下错误。
线程 1:致命错误:未找到 Session 类型的 ObservableObject。 Session 的 View.environmentObject(_:) 作为该视图的祖先可能会丢失。
struct app: App {
@State var show = true
init() {
FirebaseApp.configure()
UITabBar.appearance().barTintColor = UIColor(Color("Shallow"))
}
@EnvironmentObject var session: Session
var body: some Scene {
WindowGroup {
if session.signedIn {
TabView {
NavigationView {
DiscoverView()
}
.tabItem {
Image("discover")
Text("Discover")
}
NavigationView {
CollectorView()
}
.tabItem {
Image("collection")
Text("Liquor")
}
NavigationView {
BottlesView()
}
.tabItem {
Image("store")
Text("Recipes")
}
NavigationView {
ListsView()
}
.tabItem {
Image("lists")
Text("Lists")
}
NavigationView {
ProfileView()
}
.tabItem {
Image("profile")
Text("Profile")
}
}
.accentColor(Color("Rye"))
} else {
LoginView()
}
}
}
}
我觉得这可能与需要将.environmentObject 添加到我的窗口组中的每个单独视图有关。这产生了相同的结果。我也尝试过直接将此环境对象添加到窗口组,但没有这样的运气。有人对我在这里可能遗漏的内容有任何想法吗?
【问题讨论】: