Лучшая практика для обновления объектов Firestore из TableView? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть приложение, которое использует прослушиватель Firestore для загрузки начального массива в viewDidLoad. Он заполняет tableView, и оттуда пользователь может вносить изменения в свойства объекта в месте указателя, либо 1) нажав на ячейку и «выбрав» ее, либо 2) нажав кнопку «Next», чтобы программно перейти к следующий индекс в массиве.

Мой процесс загрузки Firestore работает хорошо, но я не уверен, как обновить его до Firestore. Я использовал глобальную переменную для отслеживания того, какой объект является «активным» (выбранный / используемый из tableView), а затем после применения к нему изменений пользователя, передав его в Firestore как ссылку на то, что должно быть обновлено. Это лучший подход? Кажется, что я должен передать объект местоположения индекса непосредственно в Firestore, однако я не могу придумать способ получить его идентичность из ViewController. Каждый объект в массиве имеет уникальный идентификатор, по которому я мог бы выполнить поиск Firestore (и обновить соответствие), но я не знаю, как получить его из tableView. Спасибо!

Вот моя первоначальная загрузка / обновление:

var songsArray = []()

func fetchSongsAndAttachListener () {
    let db = Firestore.firestore()
    guard let currentUser = Auth.auth().currentUser else {
        return
    }
    db.collection("songs").whereField("user_id", isEqualTo: currentUser.uid)
        .addSnapshotListener { querySnapshot, error in

            for document in querySnapshot?.documents ?? [] {
                    let song: Song = self.convertDictionaryToSong(document.data() as NSDictionary)
                    songsArray.append(song)
                songsArray.sort {
                    $0.tableViewLocation < $1.tableViewLocation //a property in each Song object to track order in tableView
                }
            }
         NotificationCenter.default.post(name: Notification.Name(Constant.reloadTableView), object: nil)
            }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...