Прослушиватель Firestore для обновления объекта в другом View Controller - PullRequest
0 голосов
/ 02 мая 2020

Мне нужна помощь в реализации класса Firestore Manager. Для некоторых данных я считаю, что это лучший способ, чем многократное отсоединение слушателя и повторное подключение в нескольких ViewControllers.

Пример. В настоящее время я получаю массив jobs из ViewController1 (VC1), используя приведенный ниже код.

func fsJobColl() {

    self.jobCollectionRef = Firestore.firestore().collection("Job")
    self.jobListener = self.jobCollectionRef
        .whereField("jobUsers", arrayContains: Auth.auth().currentUser?.uid ?? "")
        .addSnapshotListener { (snapshot, error) in
            if let err = error {
                debugPrint("Error fetching docs: \(err)")
            } else {
                self.jobs.removeAll()
                self.jobs = Job.parseData(snapshot: snapshot)
                //self.tableView.reloadData()
                print(self.jobs)
                //handleComplete()
            }
    }
}

Я делаю изменения в документе в VC4, и я хотел бы, чтобы это было показано в TableView в VC3 (когда пользователь возвращается).
Поэтому мне нужно jobs, чтобы обновляется при изменении данных FS.
В FS все работает правильно и выполняет обновление сервера. Кто-нибудь может объяснить, как я могу это сделать?

Я начал создавать новый класс Firestore Manager ...

class FSManager {

static let shared = FSManager()
var jobs = [Job]()
var jobCollectionRef: CollectionReference!
var jobListener: ListenerRegistration!

    func loadJobs(completion: @escaping ([Job]) -> Void) {

    self.jobCollectionRef = Firestore.firestore().collection("Job")
    self.jobListener = self.jobCollectionRef
        .whereField("jobUsers", arrayContains: Auth.auth().currentUser?.uid ?? "")
        .addSnapshotListener { (snapshot, error) in
            if let err = error {
                debugPrint("Error fetching docs: \(err)")
            } else {

                self.jobs.removeAll()
                self.jobs = Job.parseData(snapshot: snapshot)
                //self.tableView.reloadData()
                print(self.jobs)
                completion(self.jobs)
            }
        }
    }
}

, который затем вызывается в VC1. Кажется, это работает, но я не понимаю, как я могу обновить объект в VC3.

        FSLoadData.shared.loadJobs { jobs in
        self.jobs = jobs
        handleComplete()
    }

Спасибо

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