swift - 从 Firebase 获取多级节点

标签 swift firebase firebase-realtime-database

我正在尝试从节点中获取“ friend ”,以便之后能够在 UICollectionView 中显示它们。我现在意识到我必须使用结构并将 Friends 数组放入其中。我现在正在努力了解如何将它们提取到该数组中(您可以在帖子底部看到它)。数据存储在 firebase 节点中。我如何获取数据以及之后将其放入 UICollectionView 的过程是什么?到目前为止,这是我要检索的功能。

更新:(我认为我现在正在正确获取,但我没有得到任何结果。我应该在 Collection View 中做些什么吗?或者我做错了什么?)

更新:这是我的帖子获取代码:

func fetchPosts3() {

    ref.child("Users_Posts").child("\(unique)").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot)

        if snapshot.value as? [String : AnyObject] != nil {

            let allPosts = snapshot.value as! [String : AnyObject]
            self.posts.removeAll()

            for (_, value) in allPosts {

                if  let postID = value["postID"] as? String,
                    let userIDDD = value["userID"] as? String

                {
                    //ACCESS FRIENDS
                    ref.child("Users_Posts").child("\(unique)").child(postID).child("friends").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snap) in
                        print("FRIENDS: \(snap.childrenCount)")

                        //var routine = self.postsWithFriends[0].friends
                        for friendSnap in snap.children {
                            if let friendSnapshot = friendSnap as? DataSnapshot  {

                                let friendDict = friendSnapshot.value as? [String: Any]
                                let friendName = friendDict?["name"] as? String
                                let friendPostID = friendDict?["postID"] as? String

                                let postsToShow = PostWithFriends(id: userIDDD, friends: [Friend(friendName: friendName!, friendPostID: friendPostID!)])

                                self.postsWithFriends.append(postsToShow)
                                print("COUNTING: \(self.postsWithFriends.count)")

                                // then do whatever you need with your friendOnPost
                            }
                        }


                    })
                }
            }
            //GET LOCATION

            self.collectionView?.reloadData()
            self.posts.sort(by: {$0.intervalPosts! > $1.intervalPosts!})


        }
    })

    ref.removeAllObservers()
}

这就是数据在数据库中的样子:

{
    "-LN2rl2414KAISO_qcK_" : {
        "cellID" : "2",
        "city" : "Reading",
        "date" : "2018-09-23 00:41:26 +0000",
        "friends" : {
            "UJDB35HDTIdssCtZfEsMbDDmBYw2" : {
                "name" : "Natalia",
                "postID" : "-LN2rl2414KAISO_qcK_",
                "userID" : "UJDB35HDTIdssCtZfEsMbDDmBYw2"
            },
            "Vyobk7hJu5OGzOe7E1fcYTbMvVI2" : {
                "name" : "Gina C",
                "postID" : "-LN2rl2414KAISO_qcK_",
                "userID" : "Vyobk7hJu5OGzOe7E1fcYTbMvVI2"
            }
        },
    }
}

这是我存储在数组中的对象

struct PostWithFriends {
    var postID : String?
    var friends: [Friend]
}

class Friend : NSObject {
    var friendName: String?
    var friendUserID: String?
    var postID: String?

    init(friendName: String, friendPostID: String) {
        self.friendName = friendName
        self.postID = friendPostID
    }
}

最佳答案

替换这个

if let friend = snap.value as? [String : AnyObject] {

}

有了这个:

for friendSnap in snap.children {
    if let friendSnapshot = friendSnap as? FIRDataSnapshot  {
        let friendOnPost = FriendOnPost()
        let friendDict = friendSnapshot.value as? [String: Any]
        friendOnPost.name = friendDict?["name"] as? String
        friendOnPost.friendUserID = friendDict?["userID"] as? String
        friendOnPost.postID = friendDict?["postID"] as? String
        // then do whatever you need with your friendOnPost
    }
}

关于swift - 从 Firebase 获取多级节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52465087/

相关文章:

java - 使用 orderByChild() 获取计数

ios - 切出切片后做圆? iOS swift 4

xcode - 类型 'GameScene' 的值在 ReplayKit 上没有成员 'previewViewController'

java - 如何通过 URL 从 firebase 数据库下载音频文件 mp3 或 mp4 或 mpeg

json - F# 关键字是 Firebase JSON 中的一个字段 - 解决方法吗?

ios - 如何在 Firebase 中循环访问 AutoIdChilds?

swift - 命令 MergeSwiftModule 失败,退出代码非零

ios - 根据用户航向更新 iOS map

ios - 新用户与旧 Firebase Facebook 身份验证

java - 在firebase中更新数据时如何更新 TextView