线程1:致命错误:没有找到类型会话的ObservableObject。会话的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:致命错误:没有找到类型会话的ObservableObject。会话的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
添加到窗口组中的每个单独视图有关。产生了同样的结果。我也尝试将这个环境对象直接添加到窗口组中,而没有这样的运气。有没有人知道我在这里可能错过了什么?
发布于 2021-08-23 15:04:02
您所得到的错误是因为您在传入会话()之前没有实例化它()。试着做这样的事情:
@main
struct app: App {
@State var show = true
@StateObject var session = Session() // <--- here
init() {
FirebaseApp.configure()
UITabBar.appearance().barTintColor = UIColor(Color("Shallow"))
}
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")
}
}
.environmentObject(session) // <--- here
.accentColor(Color("Rye"))
} else {
LoginView()
.environmentObject(session) // <-- if you use it in this class
}
}
}
}
然后在你的DiscoverView(),CollectorView()等..。添加
@EnvironmentObject var session: Session
https://stackoverflow.com/questions/68899605
复制