tableView Firebase Swift 中的异步数据

内迪姆·库尔贝戈维奇

我在 Firebase 中最不喜欢的部分有问题。我想从用户的关注列表中提取一个帖子(每个用户只有一个帖子)。首先,我创建了一个完成处理程序来从 Firebase 获取所有关注者的列表并将其存储在 userArray 字符串数组中:

func GetUsersInFollowing(completion: @escaping (Bool) -> ()) {
    ref.child("following").queryOrdered(byChild: FIRAuth.auth()!.currentUser!.uid).observeSingleEvent(of: .value, with: { (snapshot) in
        for group in snapshot.children {
            self.userArray.append((group as AnyObject).key)
        }
        completion(true)
    })
}

现在的计划是从 userArray 的每个元素中提取一个帖子。这就是问题开始的地方。我在 GetUsersInFollowing() 完成后立即调用 CreatePosts()。

func CreatePosts() {
    for x in userArray {
        var thePost = Post()
        print("1")
        self.ref.child("users").child(x).observeSingleEvent(of: .value, with: { (snapshot) in
            let value = snapshot.value as? NSDictionary
            thePost.fullName = value?["fullname"] as? String ?? ""
            thePost.username = value?["username"] as? String ?? ""
            thePost.profileImageURL = value?["photourl"] as? String ?? ""
            print("2")
        })

        self.ref.child("posts").child(x).observeSingleEvent(of: .value, with: { (snapshot) in
            let value = snapshot.value as? NSDictionary
            thePost.description = value?["description"] as? String ?? ""
            thePost.info = value?["location"] as? String ?? ""
            thePost.postImageURL = value?["photoURL"] as? String ?? ""
            thePost.timePost = value?["timestamp"] as? NSDate
            thePost.upVotes = value?["upvotes"] as? Int ?? 0
        })

        self.postArray.append(thePost)
        self.tableView.reloadData()
    }
}

对我来说一切都很好,但肯定不是。这是我创建单元格的方法:

func configureCell(post: Post) {
    self.post = post
    self.username.text = post.username
    self.profileImage = post.profileImageURL
    print("3")
    self.fullname.text = post.fullName
    self.timestamp.text = post.timePost
    self.upvotes.text = post.upVotes
    self.location.text = post.location
    self.descriptionText.text = post.description
}

控制台中的输出各不相同,但通常我得到:1 1 3 3 2 2

这个想法是首先从 Firebase 检索所有数据,将其添加到 post 对象,将对象附加到数组,然后为该对象创建单元格并下载数据。即使未检索数据,单元格也已创建。我认为这就是问题所在。谢谢,每一个建议都值得赞赏。

珍·何塞

您需要对用户个人资料数据和帖子数据进行内部查询。像这样 -

    func CreatePosts() {

        //Using userPostArrayObjFetched as a counter to check the number of data fetched.
        //Remove this code, if you don't want to wait till all the user data is fetched.
        var userPostArrayObjFetched = 0

        for (index,userID) in userArray.enumerated() {

            print("1" + userID)

            self.ref.child("users").child(userID).observeSingleEvent(of: .value, with: { (snapshot) in

                var thePost = Post()

                let value = snapshot.value as? NSDictionary
                thePost.fullName = value?["fullname"] as? String ?? ""
                thePost.username = value?["username"] as? String ?? ""
                thePost.profileImageURL = value?["photourl"] as? String ?? ""
                print("2" + userID)

                self.ref.child("posts").child(userID).observeSingleEvent(of: .value, with: { (snapshot) in
                    let value = snapshot.value as? NSDictionary
                    thePost.description = value?["description"] as? String ?? ""
                    thePost.info = value?["location"] as? String ?? ""
                    thePost.postImageURL = value?["photoURL"] as? String ?? ""
                    thePost.timePost = value?["timestamp"] as? NSDate
                    thePost.upVotes = value?["upvotes"] as? Int ?? 0
                    print("3" + userID)

                    self.postArray.append(thePost)

//                      Uncomment if you want to reload data as fetched from Firebase without waiting for all the data to be fetched.
//                    self.tableView.reloadData()

                    userPostArrayObjFetched += 1

                    if userPostArrayObjFetched == userArray.count{
                         self.tableView.reloadData()
                    }
                })
            })
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Firebase存储中检索图像以显示在tableView(Swift)上

来自分类Dev

Swift / Firebase-按日期对tableview中的帖子进行排序

来自分类Dev

Swift / Firebase-按日期对tableview中的帖子进行排序

来自分类Dev

在 TableView 中检索多个子分支 Firebase Swift 4

来自分类Dev

Swift-如何从TableView中多个选定的单元格中将数据保存到Firebase?

来自分类Dev

Swift TableView数据填充

来自分类Dev

Firebase中的Tableview单元

来自分类Dev

更新Firebase代码后未显示TableView数据(Swift 2,Firebase 3.x)

来自分类Dev

Swift iOS中的tableView

来自分类Dev

Swift Firebase TableView 与当前用户的距离

来自分类Dev

如何在TableView中显示Firebase数据?

来自分类Dev

Firebase 的 TableView 中不显示数据

来自分类Dev

Swift-如何将来自TableView中多个选定单元格的数据保存到Firebase?

来自分类Dev

如何在TableView中更新数据(Swift)

来自分类Dev

Swift:在tableView中过滤SwiftyJSON数据

来自分类Dev

PickerView加载tableview数据Swift

来自分类Dev

以Xcode / Swift导出TableView数据

来自分类Dev

Swift 3 / Xcode / Firebase-无法访问TableView中的嵌套数组-numberOfRowsInSection

来自分类Dev

如何初始加载 UITableView 然后观察 Firebase 节点的更改以在 Swift 中刷新 tableview?

来自分类Dev

在swift MVC(Swift)中保存tableview数据

来自分类Dev

UIViewController中的Swift动态Tableview

来自分类Dev

TableView Swift中的UIImage视图

来自分类Dev

在Swift中的tableView中分页

来自分类Dev

在TableView Swift中管理节

来自分类Dev

tableView 查询中的 searchBar (Swift)

来自分类Dev

Firebase在Swift中检索数据

来自分类Dev

在Swift中从Firebase检索数据

来自分类Dev

使用Swift闭包和Firebase处理异步数据

来自分类Dev

使用从Firebase获得的数据填充tableView

Related 相关文章

  1. 1

    从Firebase存储中检索图像以显示在tableView(Swift)上

  2. 2

    Swift / Firebase-按日期对tableview中的帖子进行排序

  3. 3

    Swift / Firebase-按日期对tableview中的帖子进行排序

  4. 4

    在 TableView 中检索多个子分支 Firebase Swift 4

  5. 5

    Swift-如何从TableView中多个选定的单元格中将数据保存到Firebase?

  6. 6

    Swift TableView数据填充

  7. 7

    Firebase中的Tableview单元

  8. 8

    更新Firebase代码后未显示TableView数据(Swift 2,Firebase 3.x)

  9. 9

    Swift iOS中的tableView

  10. 10

    Swift Firebase TableView 与当前用户的距离

  11. 11

    如何在TableView中显示Firebase数据?

  12. 12

    Firebase 的 TableView 中不显示数据

  13. 13

    Swift-如何将来自TableView中多个选定单元格的数据保存到Firebase?

  14. 14

    如何在TableView中更新数据(Swift)

  15. 15

    Swift:在tableView中过滤SwiftyJSON数据

  16. 16

    PickerView加载tableview数据Swift

  17. 17

    以Xcode / Swift导出TableView数据

  18. 18

    Swift 3 / Xcode / Firebase-无法访问TableView中的嵌套数组-numberOfRowsInSection

  19. 19

    如何初始加载 UITableView 然后观察 Firebase 节点的更改以在 Swift 中刷新 tableview?

  20. 20

    在swift MVC(Swift)中保存tableview数据

  21. 21

    UIViewController中的Swift动态Tableview

  22. 22

    TableView Swift中的UIImage视图

  23. 23

    在Swift中的tableView中分页

  24. 24

    在TableView Swift中管理节

  25. 25

    tableView 查询中的 searchBar (Swift)

  26. 26

    Firebase在Swift中检索数据

  27. 27

    在Swift中从Firebase检索数据

  28. 28

    使用Swift闭包和Firebase处理异步数据

  29. 29

    使用从Firebase获得的数据填充tableView

热门标签

归档