【发布时间】:2017-10-20 14:29:34
【问题描述】:
在我的应用程序中实现 FirebaseUI 时,我使用添加 .stateDidChangeListener 来监听授权状态的变化,但是当我尝试通过将 .removeStateDidListener 添加到我的 deinit 来删除监听器时,我的应用程序崩溃了。在调试控制台中显示以下内容“致命错误:在展开可选值时意外发现 nil”并突出显示 .removeStateDidListener(见下图)。
我在 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 之外,deinit 中还有 NotificationCenter.default.removeObserver(self) 是否会导致错误?两者都是多余的吗?
【问题讨论】:
标签: ios firebase-authentication listener firebaseui