Так что здесь у меня есть функция, которая, когда появляется вкладка, сообщения загружаются из Google Firebase Firestore.Для этого сначала нужно получить список всех пользователей, за которыми следует зарегистрированный пользователь, а затем получить сообщения о каждом из пользователей в этом списке.Я хотел бы, чтобы пост загружался, а затем всякий раз, когда пользователю нравится один или выполняется другое действие, я бы хотел, чтобы LikeCount был увеличен.Я делаю это с помощью снимков, проблема в том, что когда мне нравится публикация или что-то похожее, табличное представление скачет по кругу, и создается впечатление, что загружаемые и отображаемые записи как-то отличаются друг от друга.Например, если мне нравится сообщение, которое является первым в списке, мне кажется, что мне действительно нравится сообщение, которое находится ниже.У меня такое ощущение, что это как-то связано со снимком.Любая помощь в этом была бы удивительной.Заранее спасибо.
func LoadTimeline(completed: @escaping () -> ()) {
let fourteenDaysAgo = Calendar.current.date(byAdding: .day, value: -14, to: Date())
guard Auth.auth().currentUser != nil else { return }
let userReference = db.collection("Users").document("User: \(userUID)").collection("Connect").document("Following")
userReference.getDocument { (document, error) in
if document!.exists == true {
if let documentData = document?.data(),
var FollowerArray = documentData["Following"] as? [String] {
FollowerArray.append(self.userUID)
FollowerArray.forEach {
let documentPathForUserPosts = self.db.collection("Users").document("User: \($0)").collection("Posts").whereField("timeOfPost", isGreaterThanOrEqualTo: fourteenDaysAgo!)
self.userPost = []
documentPathForUserPosts.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err.localizedDescription)")
return completed()
} else {
for document in querySnapshot!.documents {
if self.userPost.count % 3 == 0 && self.userPost.count != 0 {
let adElement = UserPost(userUID: "", userName: "", userProfileImage: "", spotName: "", spotCity: "", spotProvince: "", postTextContent: "", postDocumentID: "", spotDocumentID: "", spotAddress: "", spotCountry: "", tag: "", numberOfAdds: 0, numberOfLikes: 0, numberOfComments: 0, spotLatCoord: 0.0, spotLongCoord: 0.0, date: "", imageURL: "", imageURLUUID: "", timeOfPost: Timestamp(), isAd: true)
print("Ad Appened: Current UserPost count: ", self.userPost.count)
self.userPost.insert(adElement, at: self.userPost.count)
}
self.userPost.append(UserPost(dictionary: document.data()))
}
}
}
documentPathForUserPosts.addSnapshotListener { documentSnapshot, error in
guard let snapshot = documentSnapshot else {
print("Error fetching snapshots!")
return completed()
}
snapshot.documentChanges.forEach { diff in
let doc = diff.document
let postId = doc.documentID
let postText = doc.get("postTextContent") as! String
let numLikes = doc.get("numberOfLikes") as! Int
let numAdds = doc.get("numberOfAdds") as! Int
let numComments = doc.get("numberOfComments") as! Int
if (diff.type == .modified) {
self.tableView.beginUpdates()
let index = self.userPost.index(where: { (item) -> Bool in
item.postDocumentID == postId
})
let userPostArray = self.userPost[index!]
userPostArray.numberOfLikes = numLikes
userPostArray.numberOfAdds = numAdds
userPostArray.postTextContent = postText
userPostArray.numberOfComments = numComments
}
self.tableView.endUpdates()
}
completed()
}
}
}
} else {
print("User does not follow anyone, have any posts of their own")
self.activityIndicator.stopAnimating()
if self.userPost.count >= 1 {
self.tableView.backgroundView = nil
self.tableView.separatorStyle = .none
self.noDataLabel.isHidden = true
} else {
self.noDataLabel.isHidden = false
self.noDataInTable()
}
}
}
}