Отображение избранного только для пользователя, который вошел в систему - PullRequest
0 голосов
/ 24 мая 2018

Я хочу, чтобы пользователь добавил в избранное понравившуюся ему песню, и когда он перейдет к избранному, он увидит понравившуюся ему.В тот момент, когда он выходит на страницу, происходит сбой.

  var _favs = database.child("favs").child("\(Auth.auth().currentUser!.uid)")

однако, если я уберу дочерний путь из ссылки на базу данных, он будет работать, но покажет все песни, предпочитаемые пользователем.

Это моя функция, которая вызывает все избранное

func getAllFavourite(handler: @escaping (_ fav: [AlbumModel]) ->() ) {
    var favsArray = [AlbumModel]()
    favs.observeSingleEvent(of: .value) { (favSnapshot) in
        guard let favSnapshot = favSnapshot.children.allObjects as? [DataSnapshot] else {return}

        for favs in favSnapshot {
            let title = favs.childSnapshot(forPath: "title").value as! String
            let songId = favs.childSnapshot(forPath: "storeId").value as! String
            let artist = favs.childSnapshot(forPath: "artist").value as! String
            let senderId = favs.childSnapshot(forPath: "senderId").value as! String
            let fav = AlbumModel(artist: artist, senderId: senderId, title: title, storeId: songId)
            favsArray.append(fav)
        }

        handler(favsArray)
    }
}

1 Ответ

0 голосов
/ 24 мая 2018

Предполагая, что ваша база данных выглядит следующим образом

{
    "favs": {
        "<user-id>":{
            "title":"some title",
            "storeid":"id",
            "artist":"artist name",
            "senderId":".."
        }
    }
}

с путем доступа к этому снимку (словарю), представьте себе JsonObject

/ favs / - вы получаете снимок, где child.key = и child.value = {"title:" ...}

/ favs / user-id / - вы получаете снимок, где child.key = "title" и child.value = ".." , секунда child.key = "storeid" и child.value =" .. "

Поэтому будьте уверены, когда получите доступ к favs / , вы получите дочерний объект, но немассив из одного элемента.

Кроме того, вместо вызова childSnapshot , я рекомендую использовать это:

if let value = snap.value as? [String:Any] {
    // do you stuff here
    let title = value["title"] as? String ?? "default title"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...