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