# #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) }) } }