微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线程 1:致命错误:找不到 SessionStore 类型的 ObservableObject

如何解决线程 1:致命错误:找不到 SessionStore 类型的 ObservableObject

我收到以下错误消息:线程 1:致命错误:未找到类型为 SessionStore 的 ObservableObject。 SessionStore 的 View.environmentObject(_:) 可能缺少作为此视图的祖先。

致命错误:未找到类型为 SessionStore 的 ObservableObject。 SessionStore 的 View.environmentObject(_:) 作为此视图的祖先可能会丢失。:文件 SwiftUI,第 0 行

但我已经将 environmentObject(SessionStore()) 添加到预览中。所以我不明白为什么会这样。

这是我的 ContentView 文件

    import SwiftUI
import Firebase
import LinkKit

struct ContentView: View {
    
    func getUser() {
        session.listen()
    }
    @State private var showingSheet = true
    
    @EnvironmentObject var session: SessionStore
    @StateObject private var manager = FirebaseManager()
    
    
    var body: some View {
        Group {
            if (session.session != nil && manager.profilePicExists == true) {
                HostingTabView()
            } else if (session.session != nil && manager.profilePicExists == false){
                HostingTabView().sheet(isPresented: $showingSheet) {
                    RegistrationProfileDataView()
                }
            } else {
                AuthView()
           }
        }.onAppear(perform: getUser)
        .onAppear(perform: manager.checkForProfileImage)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environmentObject(SessionStore())
    }
}

这是 SessionStore 文件文件

import SwiftUI
import Firebase
import Combine

class SessionStore: ObservableObject {
     var didChange =  PassthroughSubject<SessionStore,Never>()
    @Published var session: User? {didSet {self.didChange.send(self) }}
    var handle: AuthStateDidchangelistenerHandle?
    
    func listen() {
        handle = Auth.auth().addStateDidchangelistener({ (auth,user) in
            if let user = user {
                self.session = User(uid: user.uid,email: user.email)
            } else {
                self.session = nil
            }
        })
    }
    
    func signUp(email: String,password: String,handler: @escaping AuthDataResultCallback) {
        Auth.auth().createuser(withEmail: email,password: password,completion: handler)
    }
    
    func signIn(email: String,handler: @escaping AuthDataResultCallback) {
        Auth.auth().signIn(withEmail: email,completion: handler)
    }
    
    func signOut() {
        do {
            try Auth.auth().signOut()
            self.session = nil
        } catch {
            print("Error signing out")
        }
    }
    
    func unbind() {
        if let handle = handle {
            Auth.auth().removeStateDidchangelistener(handle)
        }
    }
    
    deinit {
        unbind()
    }
    
}

struct User {
    var uid: String
    var email: String?
    
    init(uid: String,email: String?) {
        self.uid = uid
        self.email = email
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。