Я использую mapbox и firebase.У меня есть функция делегата, которая обновляет координаты пользователя (внутри базы данных Firebase) при изменении местоположения пользователя.Насколько мне известно, он работает как следует при входе в приложение.Делегат mapviews является контроллером представления (self.mapView.delegate = self
)
func mapView(_ mapView: MGLMapView, regionDidChangeAnimated animated: Bool){
let latitude = mapView.userLocation?.coordinate.latitude
let longitude = mapView.userLocation?.coordinate.longitude
Database.database().reference().child(pathToCoord).updateChildValues(["latitude":latitude, "longitude":longitude], withCompletionBlock: { (err, ref) in
if err != nil { print(err!); return }
}
Когда я выхожу из приложения, я хочу прекратить обновлять местоположение пользователя.В идеале мне бы хотелось, чтобы View Controller с картой полностью исчез, и чтобы все на нем прекратилось.Я написал эту функцию выхода, которая пробует несколько разных способов убедиться, что местоположение больше не обновляется.
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)
}
}
Иногда, когда я выхожу из системы, я постоянно получаю сообщение об ошибке ниже в моемприставка.Самым логичным решением, которое я могу придумать, почему это происходит, является то, что View Controller все еще работает.Я не знаю, как это остановить.
[Firebase/Database] updateChildValues: at `path/to/coord` failed: permission_denied
Error Domain=com.firebase Code=1 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied}
Редактировать
Похоже, проблема заключалась в том, что у меня это было в моем SignInViewController
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
}
}
И тогда делегат будет запускаться один раз для каждого идентификатора пользователя, как если бы два контроллера представления работали одновременно.Когда я выходил из системы, я предполагаю, что другой не вышел из системы и продолжал работать для другого идентификатора пользователя.
Это не по теме моего первоначального вопроса, но я хотел бы знать, что правильноспособ проверить, если пользователь уже вошел в систему, а затем войти в него.Потому что, очевидно, мой метод не сработал.