Ios 将.removeStateDidListener添加到Denit会导致应用程序崩溃

Ios 将.removeStateDidListener添加到Denit会导致应用程序崩溃,ios,firebase-authentication,listener,firebaseui,Ios,Firebase Authentication,Listener,Firebaseui,在我的应用程序中实现FirebaseUI时,我使用add.stateDidChangeListener来侦听授权状态中的更改,但当我尝试通过向deinit添加.removeStateDidListener来删除侦听器时,我的应用程序崩溃。在调试控制台中显示以下致命错误:在展开可选值并突出显示.removeStateDidListener时意外发现nil请参见下图 我在ViewController的顶部声明侦听器,如下所示: var user: User? let authUI = FUIAuth

在我的应用程序中实现FirebaseUI时,我使用add.stateDidChangeListener来侦听授权状态中的更改,但当我尝试通过向deinit添加.removeStateDidListener来删除侦听器时,我的应用程序崩溃。在调试控制台中显示以下致命错误:在展开可选值并突出显示.removeStateDidListener时意外发现nil请参见下图

我在ViewController的顶部声明侦听器,如下所示:

var user: User?
let authUI = FUIAuth.defaultAuthUI()
fileprivate var _authHandle: AuthStateDidChangeListenerHandle!
下面是我实现侦听器的代码:

func configureAuth() {
    let providers: [FUIAuthProvider] = [FUIGoogleAuth()]
    authUI?.providers = providers

    // listen for change in authorization state
    _authHandle = Auth.auth().addStateDidChangeListener({ (auth: Auth, user: User?) in
        if let activeUser = user {
            if self.user != activeUser {
                self.user = activeUser
            }
        } else {
            // user must login
            self.loginSession()
        }
    })
} 

除了.removeStateDidChangeListener之外,Denit中还有NotificationCenter.default.removeObserverself,这可能是错误的结果吗?这两个都是多余的吗?

我猜,deinit中的authHandle已经为零了。如果可以的话,测试一下这个。还请注意,对于iOS 9+,您不需要调用removeObserver方法。

我的代码中还有一个通知观察员。是否仍然不需要调用removeObserver?如果_authHandle已经为零,我可以不使用removeStateDidChange吗?@Notification observer?它们将由iOS版本9+的iOS自动处理。在以前的版本中需要removeObserver,这是因为接收通知的Denited观察员崩溃。情况不再如此。关于RevestestDeDechange——考虑调用这个方法在更合适的地方,如VIEWWORD WORD或其他,取决于您的应用程序逻辑。再看一看,它可能会对您有所帮助。我将它添加到ViewWillEnglish中,现在它似乎正在工作。