Firebase Firestore Запрос сообщений и снимок - PullRequest
0 голосов
/ 26 февраля 2019

Так что здесь у меня есть функция, которая, когда появляется вкладка, сообщения загружаются из 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()
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...