Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Firebase和Xcode 12的SwiftUI应用程序生命周期_Firebase_Google Cloud Firestore_Swiftui_Ios14_Xcode12 - Fatal编程技术网

使用Firebase和Xcode 12的SwiftUI应用程序生命周期

使用Firebase和Xcode 12的SwiftUI应用程序生命周期,firebase,google-cloud-firestore,swiftui,ios14,xcode12,Firebase,Google Cloud Firestore,Swiftui,Ios14,Xcode12,我得到了这个线程错误线程1:EXC\u BAD\u访问(code=2,address=0x7ffeecc0bfe8) 根据我在示例.App中配置启动的方式,控制台会打印未找到挂起的快照或UIApplicationAdaptor不符合AppDelegate 下面是Xcode 12的代码(直接来自Firebase的Peter Friese,将颜色替换为示例作为应用程序名称): 我的InitialView如下所示: import SwiftUI struct InitialView: View

我得到了这个线程错误
线程1:EXC\u BAD\u访问(code=2,address=0x7ffeecc0bfe8)

根据我在
示例.App
中配置启动的方式,控制台会打印
未找到挂起的快照
UIApplicationAdaptor不符合AppDelegate

下面是Xcode 12的代码(直接来自Firebase的Peter Friese,将
颜色
替换为
示例
作为应用程序名称):

我的
InitialView
如下所示:


import SwiftUI

struct InitialView: View {
    @EnvironmentObject var session: SessionStore
    
    func listen() {
        session.listenAuthenticationState()
    }
   
    var body: some View {
        Group {
            if session.isLoggedIn {
                MainView()
            }
            if !session.isLoggedIn {
                SignInView()
            }
        }
        .onAppear(perform: listen)
    }
}

我的
会话存储
也是这样


import Foundation
import Combine
import Firebase

class SessionStore: ObservableObject {
    
    @Published var isLoggedIn = false

    var userSession: User?
    var handle: AuthStateDidChangeListenerHandle?
    
    func listenAuthenticationState() {
        handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
            if let user = user {
                print(user.email ?? "")
                let firestoreUserId = Ref.FIRESTORE_DOCUMENT_USERID(userId: user.uid)
               
                firestoreUserId.getDocument { (document, error) in
                    if let dict = document?.data() {
                        guard let decodeUser = try? User.init(fromDictionary: dict) else { return }
                            self.userSession = decodeUser
                    }
                }
                self.isLoggedIn = true
            } else {
                print("isLoggedIn is false")
                self.isLoggedIn = false
                self.userSession = nil
            }
        })
    }
}

已更新


// Firestore
    static var FIRESTORE_ROOT = Firestore.firestore()
    
    // Firestore - Users
    static var FIRESTORE_COLLECTION_USERS = FIRESTORE_ROOT.collection("users")
    static func FIRESTORE_DOCUMENT_USERID(userId: String) -> DocumentReference {
        return FIRESTORE_COLLECTION_USERS.document(userId)
    }


嗨,大卫,我没法重新解释这件事。在我看来,你的代码基本上没问题。您能否共享
Ref.FIRESTORE\u DOCUMENT\u USERID的代码(最好将其添加到原始问题中)。另外,你能详细解释一下“取决于我如何配置我的启动”是什么意思吗?嗨,@PeterFriese。通过“配置我的启动”,我的意思是,我尝试在我的
应用程序委托
didFinishLaunchingWithOptions
中初始化Firebase,而不是在
@main
结构的初始值设定项中初始化Firebase。我还尝试了其他事情,比如不使用
应用程序委托
。当我第一次创建项目时,是否可能不选择“应用程序委派”?我可以用任何其他方式初始化Firebase吗?如果您只使用Firestore,您可以在应用程序类的初始化器中初始化Firebase-请参阅的“开始使用SwiftUI应用程序生命周期”部分中的第一个代码段。无论如何,这都不应该崩溃。还有别的事情。您是否使用最新版本的Firebase吊舱?是的。让我试试,然后再回到这篇文章。谢谢你,彼得。

// Firestore
    static var FIRESTORE_ROOT = Firestore.firestore()
    
    // Firestore - Users
    static var FIRESTORE_COLLECTION_USERS = FIRESTORE_ROOT.collection("users")
    static func FIRESTORE_DOCUMENT_USERID(userId: String) -> DocumentReference {
        return FIRESTORE_COLLECTION_USERS.document(userId)
    }