-1

我获取数据并在 tableView 中显示,问题是数据没有按正确的顺序执行。

我努力了:

            for case let child as DataSnapshot in data!.children.reversed() {
                let newDispatchGroup = DispatchGroup()
                let commentID = child.key
                let uid = child.childSnapshot(forPath: "UID").value as! String
                let commentText = child.childSnapshot(forPath: "Comment").value!
                let timeStamp = child.childSnapshot(forPath: "timeStamp").value!
                let date = ConvertDate(mediaTimestamp: timeStamp as! Double).getDate!
                //print(date, "dsfsdafdasfdsafdsahjkfhfdsafsajkadhffdsfsafsasjkfhsdajkhfdsajkhfjklads")

                newDispatchGroup.enter()

                ref.child("users2").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
                    print(snapshot, "dshjkfhjkadhfsjkfhsdajkhfdsajkhfjklads")
                    print(date, "dsfsdafdasfdsafdsahjkfhfdsafsajkadhffdsfsafsasjkfhsdajkhfdsajkhfjklads")

                    let username = snapshot.childSnapshot(forPath: "username").value
                    let profileImage = snapshot.childSnapshot(forPath: "profileImage").value

                    let newUser = User(theuserID: uid, theUsername: username as! String, theprofImage: profileImage as! String)

                    let newComment = Comment(newUser: newUser, text: commentText as! String, timeStamp: date, NcommentID: commentID)
                    self.commentsVC1.arrayOfComments.append(newComment)
                    newDispatchGroup.leave()
                    //completion()
                })
                newDispatchGroup.notify(queue: .main, execute: {
                    print(self.totalComments, "COgfdsdfgfdsgdsfgdfsgfdsgdfsgdskj", self.commentsVC1.arrayOfComments.count)
                    if self.totalComments == self.commentsVC1.arrayOfComments.count {
                        print("COmejkfbdshkafdsagfhksdagfdsakj")
                        self.commentsVC1.tableView.reloadData()
                    }
                })
            }
        })
    }

但它也不起作用,第二个 firebase 调用的执行顺序不正确。

4

2 回答 2

0

我解决了这个问题:

    for case let child as DataSnapshot in snap.children.reversed() {
                    let commentID = child.key
                    let uid = child.childSnapshot(forPath: "UID").value as! String
                    let commentText = child.childSnapshot(forPath: "Comment").value!
                    let timeStamp = child.childSnapshot(forPath: "timeStamp").value!
                    let date = ConvertDate(mediaTimestamp: timeStamp as! Double).getDate!
                    let newUser = User(theuserID: uid)
                    let newComment = Comment(newUser: newUser, text: commentText as! String, timeStamp: date, NcommentID: commentID)
                    self.commentsVC1.arrayOfComments.append(newComment)
                    ref.child("users2").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in

                        let username = snapshot.childSnapshot(forPath: "username").value
                        let profileImage = snapshot.childSnapshot(forPath: "profileImage").value

                        let newUserIner = User(theuserID: uid, theUsername: username as! String, theprofImage: profileImage as! String)
                        newComment.user = newUserIner
                        if self.totalComments == self.commentsVC1.arrayOfComments.count {
                            self.commentsVC1.tableView.reloadData()
                        }
                    })
                }

我会在这里使用调度组,所以不必检查它是否不必要地完成。

于 2019-07-22T20:08:04.313 回答
0

您应该notify在设置DispatchGroup. 而且您不需要为您的loadComments功能使用完成闭包。

let dispatchGroup = DispatchGroup()
dispatchGroup.notify(queue: .main, execute: {
    if self.totalComments == self.commentsVC1.arrayOfComments.count {
        print("COmejkfbdshkafdsagfhksdagfdsakj")
        self.commentsVC1.tableView.reloadData()
    }
})

loadComments()

notify将被调用,当leave被调用的次数与enter. 在您的代码中,最后一次leave调用是在您设置要通知的任何内容之前发生的。

于 2019-07-17T02:38:03.660 回答