У меня есть ссылка, и я хочу только слушать, когда добавляются новые элементы (это viewWillAppear
ниже). Когда добавляется новый элемент, появляется newItemsButton. Если ничего нового не добавлено к тому, что уже существует внутри базы данных, кнопка не должна появиться.
Проблема в том, что как только наблюдатель начинает наблюдать, появляется newItemButton, даже если ничего нового не было добавлено. Что я делаю не так?
db:
-posts
-postId_1
-postId_2
-postId_3
код:
var startKey: String?
let postsRef = Database.database().reference().child("posts")
let postsObserverRef = Database.database().reference().child("posts")
override func viewDidLoad() {
super.viewDidLoad()
paginate()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
listenForNewItems()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
postsObserverRef.removeAllObservers()
}
func listenForNewItems() {
postsObserverRef.observe(.childAdded) { (snapshot) in
let postId = snapshot.key
let isContained = self.dataSource.contains { $0.postId == postId }
if !isContained {
// show newItemsButton
}
}
}
func paginate() {
if startKey == nil {
postsRef.queryOrderedByKey().queryLimited(toLast: 20)
.observeSingleEvent(of: .value, with: { (snapshot) in
// fill datasource
})
} else {
postsRef.queryOrderedByKey().queryEnding(atValue: startKey).queryLimited(toLast: 21)
.observeSingleEvent(of: .value, with: { (snapshot) in
// fill datasource
})
}
}