Получить многоуровневый узел из Firebase - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь получить "друзей" из узла, чтобы потом показать их в UICollectionView.Теперь я понял, что должен использовать структуру и поместить массив Friends внутри.Сейчас я пытаюсь понять, как получить их в этот массив (вы можете увидеть это внизу поста).Данные хранятся в узле Firebase.Как я могу получить данные, и какова будет процедура для помещения их в UICollectionView после этого?Это моя функция для получения.

ОБНОВЛЕНИЕ: (Я думаю, что сейчас получаю правильно, но я не получаю никаких результатов. Есть ли что-то, что я должен сделать в представлении коллекции? Или что я делаюнеправильно?)

ОБНОВЛЕНИЕ: Вот мой код для пост-выборки:

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
    }
}

1 Ответ

0 голосов
/ 23 сентября 2018

Замените это

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