我试图允许用户使用警报将数据保存到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中,它仍为每个用户保存。
答案 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