Я пытаюсь изменить код, написанный предыдущим программистом.Он написал функцию getPostFromFirebase()
, в которой он обновляет представление таблицы, когда 1) приложение загружается из-за его присутствия в viewDidLoad
и 2), когда пользователь добавляет новое сообщение.Проблема в том, что он использовал тип события .observe(.childAdded)
, что означает, что при удалении или изменении сообщения tableView не будет обновляться (моя конечная цель - сделать).Когда я изменяю .childAdded
на .value
, текущие данные не загружаются при запуске.Я ударился головой о стену, чтобы вычислить оператор if let
для добавления типа события .value
, чтобы представление могло обновляться после любого изменения (если это вообще возможно).Я знаком с Firebase RT DB, следовательно, как мне удалось идентифицировать проблему наблюдателя, но я далеко не так близко, как хотелось бы, поэтому любая помощь приветствуется.
func getPostFromFirebase() {
let mostRecent = dbRef.lastestPostsQuery(count: 10)
mostRecent.keepSynced(true)
mostRecent.observe(.childAdded) { (snapshot: DataSnapshot) in
/*parse method in the PostFetcher class
that returns the post data or an error by way of a tuple.*/
let (post, error) = PostFetcher.parsePostSnapshot(snapshot: snapshot)
if let post = post {
self.latestPosts.append(post)
if let postId = post.postId { print("PostId = \(postId)") }
}
if let error = error {
print("\(#function) - \(error)")
}
}
}
Редактировать: Благодаря помощи Фрэнкса я смог реализовать его предложение и добавил .removeAll()
, чтобы удалить текущее состояние и добавить в представление новый снимок.Независимо от того, добавлено или удалено сообщение, представление теперь обновляется так, как мне бы хотелось.
func getPostFromFirebase() {
let mostRecent = dbRef.lastestPostsQuery(count: 10)
mostRecent.keepSynced(true)
mostRecent.observe(.value) { (snapshot: DataSnapshot) in
self.latestPosts.removeAll()
for child in snapshot.children.allObjects as! [DataSnapshot] {
let (post, error) = PostFetcher.parsePostSnapshot(snapshot: child)
if let post = post {
self.latestPosts.append(post)
self.tableView.reloadData()
if let postId = post.postId { print("PostId = \(postId)") }
}
if let error = error {
print("\(#function) - \(error)")
}
}
}
}