Я хочу, чтобы моя таблица перезагружалась после того, как она увидела изменения в базе данных Firestore - PullRequest
0 голосов
/ 15 апреля 2020

** Я хочу, чтобы мой просмотр таблицы перезагружался после того, как он увидел изменение в базе данных firestore. Я думал, что использование перезагрузки tableview заставит его перезагрузить, но нет, он не загружает только новые данные после перезапуска приложения. Я хочу новое данные для перезагрузки сразу после загрузки функции ежедневной мотивации изменились **

    import UIKit
    import Firebase

   //MARK: MAINVIEW MOTIVATION

    class motivationviewcontroller : UIViewController,UITableViewDataSource,UITableViewDelegate{


var motivationThoughts = [MotivatioNDataModel]()

var tableview : UITableView!

override func viewDidLoad() {
    print("madicc")

    print("the user logged in is \( Auth.auth().currentUser?.email)")

    tableview =  UITableView(frame: view.bounds, style: .plain)
           tableview.backgroundColor = UIColor.white
           view.addSubview(tableview)


    var layoutGuide : UILayoutGuide!
    layoutGuide = view.safeAreaLayoutGuide

    let cellNib = UINib(nibName: "dailyMotivationTableViewCell", bundle: nil)
    tableview.register(cellNib, forCellReuseIdentifier: "DailyThoughtCELL")



    tableview.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
    tableview.topAnchor.constraint(equalTo: layoutGuide.topAnchor).isActive = true
    tableview.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
    tableview.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true


    tableview.dataSource = self
    tableview.delegate = self


    loaddailymotivation()
    self.tableview.reloadData()


}

override func viewDidAppear(_ animated: Bool) {


  //loaddailymotivation()
    self.tableview.reloadData()

}



    //======================================================================

  //MARK: LOADS THE DATA INTO THE TABLEVIEW
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    motivationThoughts.count
   }

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DailyThoughtCELL", for: indexPath) as? dailyMotivationTableViewCell

    cell!.generateCellsforDailymotivation(_MotivationdataMODEL: motivationThoughts[indexPath.row])

    return cell!
   }





//MARK: FUNCTION THAT HANDLES GETTING THE DATA FROM FIREBASE
func loaddailymotivation() {

    FirebaseReferece(.MotivationDAILY).getDocuments { (snapshot, error) in

        if let error = error {
            print("error getting MOTIVATIONDAILY DATA \(error.localizedDescription)")
        }

        else {

            guard let snapshot = snapshot else { return }

        for allDocument in snapshot.documents {

                let data = allDocument.data()


                print("\(allDocument.documentID) => \(allDocument.data())")

                print("we have\(snapshot.documents.count) documents in this array")

                let dailymotivationTitle = data["Motivation title"] as! String //calls the data thats heald inside of motivation title in firebase
                let dailyMotivationScripture = data["daily motivation scripture"] as! String //calls the data thats heald inside of Motivation script in firebase

                let dailyMotivationNumberOfLikes = data["Number of likes in daily motivation post"]as! Int


            let newthought = MotivatioNDataModel(RealmotivationTitle: dailymotivationTitle, RealmotivationScrip: dailyMotivationScripture, RealmotivationNumberOfLikes: dailyMotivationNumberOfLikes )
            self.motivationThoughts.append(newthought)


              }
        }


    }


}

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Проблема в том, что вы извлекаете данные, но не перезагружаете свой tableView после этого. Измените свою loaddailymotivation () на приведенную ниже

func loaddailymotivation() {
        FirebaseReferece(.MotivationDAILY)
        .addSnapshotListener { querySnapshot, error in
            guard let snapshot = querySnapshot else {
                print("Error fetching snapshots: \(error!)")
                return
            }
            snapshot.documentChanges.forEach { diff in
                if (diff.type == .added) {

                    let data = diff.document.data()

                    let dailymotivationTitle = data["Motivation title"] as! String //calls the data thats heald inside of motivation title in firebase
                    let dailyMotivationScripture = data["daily motivation scripture"] as! String //calls the data thats heald inside of Motivation script in firebase

                    let dailyMotivationNumberOfLikes = data["Number of likes in daily motivation post"]as! Int


                    let newthought = MotivatioNDataModel(RealmotivationTitle: dailymotivationTitle, RealmotivationScrip: dailyMotivationScripture, RealmotivationNumberOfLikes: dailyMotivationNumberOfLikes )
                    self.motivationThoughts.append(newthought)

                }
                if (diff.type == .modified) {
                    print("Modified data: \(diff.document.data())")
                    //  here you will receive if any change happens in your data add it to your array as you want
                }

                DispatchQueue.main.async {
                    self.tableview.reloadData()
                }

            }
        }
    }

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

1 голос
/ 15 апреля 2020

Вы можете попробовать добавить "addSnapshotListener" к вашей "ФУНКЦИИ, КОТОРАЯ ОБРАЩАЕТСЯ С ПОЛУЧЕНИЕМ ДАННЫХ ИЗ FIREBASE".

Давайте попробуем добавить это так:

func loaddailymotivation() {

FirebaseReferece(.MotivationDAILY).getDocuments.addSnapshotListener { (snapshot, error) in

    if let error = error {
        print("error getting MOTIVATIONDAILY DATA \(error.localizedDescription)")
    }

    else {

        guard let snapshot = snapshot else { return }

    for allDocument in snapshot.documents {

            let data = allDocument.data()


            print("\(allDocument.documentID) => \(allDocument.data())")

            print("we have\(snapshot.documents.count) documents in this array")

            let dailymotivationTitle = data["Motivation title"] as! String //calls the data thats heald inside of motivation title in firebase
            let dailyMotivationScripture = data["daily motivation scripture"] as! String //calls the data thats heald inside of Motivation script in firebase

            let dailyMotivationNumberOfLikes = data["Number of likes in daily motivation post"]as! Int


        let newthought = MotivatioNDataModel(RealmotivationTitle: dailymotivationTitle, RealmotivationScrip: dailyMotivationScripture, RealmotivationNumberOfLikes: dailyMotivationNumberOfLikes )
        self.motivationThoughts.append(newthought)


          }
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...