Как мне узнать, есть ли изменения в моей базе данных Firestore, а затем уведомить и предложить пользователю перезагрузиться?

# #ios #swift #firebase #google-cloud-firestore

#iOS #быстрый #огневая база #google-облако-firestore

Вопрос:

Вот мой код ViewModel, который собирает данные из firebase firestore:

 gettingData = true    //read docs at path templeu  print("lt;-- Getting restaurants from (selectedCollege) database --gt;")  db.collection(selectedCollege).addSnapshotListener({ [self] querySnapshot, error in  guard let documents = querySnapshot?.documents else {  print("no documents")  return  }    self.restaurantList = documents.map { (queryDocumentSnapshot) -gt; Categories in  let data = queryDocumentSnapshot.data()    return Categories(  id: data["id"] as? String ?? UUID().uuidString,  name: data["name"] as? String ?? "[Name]",  type: data["type"] as? [String] ?? ["None"],  pic: data["pic"] as? String ?? "",  price: data["price"] as? String ?? "",  hours: data["hours"] as? [String:[String]] ?? ["Thursday": ["0.00", "0.00"]],  hoursString: data["hoursString"] as? String ?? "",  stars: data["stars"] as? String ?? "",  website: data["website"] as? String ?? "",  location: data["location"] as? String ?? "",  coordinates: data["coordinates"] as? [Double] ?? [0.0, 0.0],  phoneNumber: data["phoneNumber"] as? String ?? "1112223456",  currency: data["currency"] as? String ?? "[Currency]",  review: data["review"] as? [String] ?? ["Review"],  wait: data["wait"] as? String ?? "[Wait]",  campus: data["campus"] as? String ?? "[Campus]",  featured: data["featured"] as? Bool ?? false,  forceClose: data["forceClose"] as? Bool ?? false  )  }  self.moodList = self.restaurantList  print("lt;-- Done Getting Data --gt;")  self.gettingData = false  })  

В настоящее время, когда я обновляю что-то в базе данных, пользователь вытесняется с любого экрана, на котором он находился, по мере обновления данных в моих представлениях. Как определить, когда в моей базе данных произошли изменения, затем уведомить об этом пользователя и предложить ему обновить данные с помощью кнопки, которая появляется в представлении?

Комментарии:

1. Пожалуйста, используйте этот xcode тег только для вопросов о самой среде разработки XCode. Для вопросов о программировании iOS в целом используйте ios тег.

Ответ №1:

Вы можете сделать закрытие и вызвать его в функции viewDidLoad (), и когда в Firestore происходят какие-либо изменения, вы можете показать пользователю предупреждающее сообщение, хочет ли он перезагрузить интерфейс или нет.

показать пример:

 class HomePageViewController: UIViewController {    var restaurantList: [Category] = []  var gettingData: Bool = true    override func viewDidLoad() {  super.viewDidLoad()   self.setListnerCollectionOfCategories() { categories in    let alert = UIAlertController(title: "New Data!!", message: "Are you sure want to refresh data?", preferredStyle: .alert)    let ok = UIAlertAction(title: "Yes", style:  UIAlertAction.Style.default) {  UIAlertAction in   self.restaurantList = categories  self.gettingData = true    //MARK:- reload data   }   let cancel = UIAlertAction(title: "Cancel", style:  UIAlertAction.Style.cancel) {  UIAlertAction in  self.gettingData = true  }    alert.addAction(ok)  alert.addAction(cancel)   self.present(alert, animated: true, completion: nil)    }    }    func setListnerCollectionOfCategories(completion: @escaping(([Category])-gt;(Void))) {  //read docs at path templeu  print("lt;-- Getting restaurants from (selectedCollege) database --gt;")  db.collection(selectedCollege).addSnapshotListener({ [self] querySnapshot, error in  guard let documents = querySnapshot?.documents else {  print("no documents")  return  }    var categories = [Category] = []  categories = documents.map { (queryDocumentSnapshot) -gt; Categories in  let data = queryDocumentSnapshot.data()    return Categories(  id: data["id"] as? String ?? UUID().uuidString,  name: data["name"] as? String ?? "[Name]",  type: data["type"] as? [String] ?? ["None"],  pic: data["pic"] as? String ?? "",  price: data["price"] as? String ?? "",  hours: data["hours"] as? [String:[String]] ?? ["Thursday": ["0.00", "0.00"]],  hoursString: data["hoursString"] as? String ?? "",  stars: data["stars"] as? String ?? "",  website: data["website"] as? String ?? "",  location: data["location"] as? String ?? "",  coordinates: data["coordinates"] as? [Double] ?? [0.0, 0.0],  phoneNumber: data["phoneNumber"] as? String ?? "1112223456",  currency: data["currency"] as? String ?? "[Currency]",  review: data["review"] as? [String] ?? ["Review"],  wait: data["wait"] as? String ?? "[Wait]",  campus: data["campus"] as? String ?? "[Campus]",  featured: data["featured"] as? Bool ?? false,  forceClose: data["forceClose"] as? Bool ?? false  )  }  print("lt;-- Done Getting Data --gt;")  self.gettingData = false  completion(categories)    })   }   }