Ios 关闭包含Mapview的视图控制器后,Mapview委托函数继续运行

Ios 关闭包含Mapview的视图控制器后,Mapview委托函数继续运行,ios,swift,firebase,delegates,mapbox,Ios,Swift,Firebase,Delegates,Mapbox,我正在使用mapbox和firebase。 我有一个委托函数,当用户的位置发生变化时,它会更新用户的坐标(在firebase数据库内部)。 据我所知,它在登录到应用程序时正常工作。mapviews代理是视图控制器(self.mapView.delegate=self) 当我退出应用程序时,我想停止更新用户位置。 理想情况下,我只希望带有地图的视图控制器完全消失,并且上面的所有内容都停止运行。 我编写了这个注销函数,尝试了几种不同的方法来确保位置不再更新 func signOut(){

我正在使用mapbox和firebase。 我有一个委托函数,当用户的位置发生变化时,它会更新用户的坐标(在firebase数据库内部)。 据我所知,它在登录到应用程序时正常工作。mapviews代理是视图控制器(
self.mapView.delegate=self

当我退出应用程序时,我想停止更新用户位置。 理想情况下,我只希望带有地图的视图控制器完全消失,并且上面的所有内容都停止运行。 我编写了这个注销函数,尝试了几种不同的方法来确保位置不再更新

func signOut(){

    for id in Auth.auth().currentUser?.providerData{
        if id.providerID == "facebook.com"{
            FBSDKLoginManager().logOut()
        }
    }
    do {
        try Auth.auth().signOut()
    }catch let logoutError {
        print(logoutError)
    }


    self.mapView.delegate = nil
    if let vc = self.storyboard!.instantiateViewController(withIdentifier: "SignInViewController") as? SignInViewController{
        UIApplication.shared.keyWindow?.rootViewController = vc
            self.dismiss(animated: true, completion: nil)
    }

}
但有时当我注销时,我会在控制台中不断出现下面的错误。对于发生这种情况的原因,我能想到的最合理的解决方案是视图控制器仍在运行。我不知道如何让它停止

[Firebase/Database] updateChildValues: at `path/to/coord` failed: permission_denied
Error Domain=com.firebase Code=1 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied}

编辑

所以看起来问题可能是我的SignenView控制器中有这个

    if let uid = Auth.auth().currentUser?.uid{
               if let vc = self.storyboard!.instantiateViewController(withIdentifier: "MainViewController") as? MainViewController{
        vc.uid = uid
        UIApplication.shared.keyWindow?.rootViewController = vc

    }
    }
然后,代理将为每个uid运行一次,就像两个视图控制器同时运行一样。当我注销时,我猜另一个没有注销,一直在运行另一个用户id


这与我最初的问题无关,但我想知道检查用户是否已经登录,然后再登录的正确方法是什么。因为很明显,我的方法不起作用。

为什么不尝试使用下面的完成处理程序块来消除呢

self.dismiss(animated: true, completion: {
    if let vc = self.storyboard!.instantiateViewController(withIdentifier: "SignInViewController") as? SignInViewController{
        UIApplication.shared.keyWindow?.rootViewController = vc

   }
})

我认为这不起作用,因为我所在的视图是根视图控制器,我觉得我不能忽略它,因为它下面没有任何内容。很抱歉我在休假,不管怎样你解决了这个问题?
self.dismiss(animated: true, completion: {
    if let vc = self.storyboard!.instantiateViewController(withIdentifier: "SignInViewController") as? SignInViewController{
        UIApplication.shared.keyWindow?.rootViewController = vc

   }
})