Как сохранить данные в определенный uid для определенного вошедшего в систему пользователя в swift / firebase - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь разрешить пользователю сохранять данные в табличном представлении, используя предупреждение, которое передает данные из контроллера представления, в котором находится предупреждение (CreatePlaylistVC), в другой ViewController (CreatedPlaylistVC), в котором находится tableView, сохраняя для каждогоопределенная учетная запись для определенного uid.

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

CreatePlaylistVC

ref = Database.database().reference()

alert.addAction(UIAlertAction(title:"OK", style:.default, handler: {
action in



    if let playlistName = alert.textFields?.first?.text {


        let userID = Auth.auth().currentUser?.uid

        self.ref?.child("PlaylistName").child(userID!).setValue(playlistName)

CreatedPlaylistVC

var ref:DatabaseReference?
var databaseHandle:DatabaseHandle?

override func viewDidLoad() {


    //Set the firebase reference
    ref = Database.database().reference()

  //Retrieve the posts and listen fro changes
    databaseHandle = ref?.child("PlaylistName").observe(.childAdded, with: { (snapshot) in


      //Try to covert the value of the data to a string
        let post = snapshot.value as? String

        if let actualPost = post {

           //Append the data to our playlistNameArray
            self.playlistNameArray.append(actualPost)

            //Reload the tableView
            self.tableView.reloadData()
        }
    })
}

Ожидаемые результаты - сохранение данных только для указанного идентификатора пользователя или пользователя, вошедшего в систему.Но он сохраняется для каждого пользователя, хотя в базе данных он сохраняется с правильным uid.

1 Ответ

0 голосов
/ 24 сентября 2019

При использовании .childAdded для наблюдения он будет проходить через каждого существующего потомка в «PlaylistName», который в этом случае будет каждым пользователем, который что-то сохранил.

Возможно, придется пересмотреть вашу структуру.Или используйте childByAutoID.

Редактировать: Чтобы использовать child с автоматическим идентификатором

// Your ["Name": Playlist] will get nested into an autogenerated child
self.ref?.child("PlaylistName").child(userID!).childByAutoID().setValue(["Name":playlistName])
//You will be listening for any new additions that your current user has made
databaseHandle = ref?.child("PlaylistName").child(Auth.auth().currentUser!.uid).observe(.childAdded, with: { (snapshot) in

        // this loops through a list of playlist names your user creates
        for child in snapshot.children{

            let snap = child as! DataSnapshot
            let value = snap.value as? Dict<String,Any>
            let post = value["Name"] as! String

            if let actualPost = post {

                self.playlistNameArray.append(actualPost)
                self.tableView.reloadData()
            }
        }
    })

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

self.ref?.child(userID!).child("PlaylistName").setValue(playListName)
databaseHandle = ref?.child(userID!).observe(.childAdded, with: { (snapshot) in

        let value = snapshot.value as? Dict<String,Any>
        let post = value["PlaylistName"]

        if let actualPost = post {

            self.playlistNameArray.append(actualPost)
            self.tableView.reloadData()
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...