gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:21:00 25 4
gpt4 key购买 nike

我正在尝试允许用户使用警报将数据保存到 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,它也会为每个用户保存。

最佳答案

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

可能需要重新考虑您的结构。或者使用 childByAutoID。

编辑:通过自动 ID 使用 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()
}
})

关于swift - 如何在 swift/firebase 中将数据保存到特定登录用户的特定 uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com