У меня есть приложение, которое использует прослушиватель 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)
}
}