如何在swift / firebase中将数据保存到特定登录用户的特定uid

时间:2019-09-23 20:29:04

标签: swift firebase firebase-realtime-database

我试图允许用户使用警报将数据保存到tableView中,该警报将警报所在的View Controller(CreatePlaylistVC)的数据传输到tableView所在的另一个ViewController(CreatedPlaylistVC),为每个事件保存特定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或当前登录的用户保存数据。但是,即使已将其保存到正确的uid中,它仍为每个用户保存。

1 个答案:

答案 0 :(得分:0)

使用.childAdded进行观察时,它将遍历“ PlaylistName”下的每个现有子级,在这种情况下,它将是每个保存了某些内容的用户。

可能必须重新考虑您的结构。或使用childByAutoID。

编辑:通过自动ID使用子级

//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()
        }
    })
implementation