Я использую Firestore вместе с iglistkit для отображения данных в представлении коллекции. Я пытаюсь понять, почему мой слушатель снимка вызывается дважды с одним и тем же объектом.
Краткое описание вопроса:
В Viewdidload я вызываю метод fetchUserFriends()
и получаю документы, которые ожидаю от querySnapshot, но по неизвестной причине тело метода вызывается дважды, без каких-либо изменений в данных.
Проблемный код приведен ниже:
func fetchUserFriends() {
guard let currentUserId = currentUser?.uid else { return }
db.collection("friends").whereField(FriendState.isRelationshipActive, isEqualTo: true).whereField("members", arrayContains: currentUserId).order(by: "createdAt", descending: true).addSnapshotListener { [weak self] (querySnapshot, error) in
if(error != nil) {
print("error \(String(describing: error?.localizedDescription))")
}
guard let querySnapshot = querySnapshot else { return }
for document in querySnapshot.documents {
let friendRelation = UserRelation.init(document: document)
if(self?.friendsRelations != nil) {
self?.friendsRelations?.append(friendRelation)
} else {
self?.friendsRelations = [friendRelation]
}
}
self?.adapter.reloadData(completion: nil)
}
}
На основании моей отладки происходит следующее:
- fetchUserFriends () вызывается
- проходит через охрану let querySnapshot = querySnapshot else {return} и добавляет данные в
friendRelations
массив
self?.adapter.reloadData(completion: nil)
тогда строка ниже работает
и снова возвращается ко 2-му шагу с тем же объектом, который в этом случае завершается ошибкой из-за дублирующего идентификатора iglistkit.
Спасибо за помощь.