gpt4 book ai didi

swift - Firebase 如何在单击按钮时在另一个 viewController 中显示右子值

转载 作者:行者123 更新时间:2023-11-30 11:52:55 26 4
gpt4 key购买 nike

我需要一些帮助,我是 Swift 和 Firebase 的新手。

我有一个 GoogleMaps,在 FirstViewController 上有一些标记。一个标记就是一个事件,每个事件都有一个所有者用户,所有者有一个名字。当任何其他用户单击 map 上的标记时,他可以选择查看事件或查看在 map 上发布该标记的所有者的用户个人资料。

但问题是我找不到如何显示单击标记的正确配置文件。有人可以帮助我吗?

这是我的 Firebase 标记数据库: enter image description here

这就是当用户单击 map 上的标记时发生的情况: enter image description here

如果我选择“查看个人资料”按钮,那么这就是显示下图的 UserViewController。您可以看到标记的用户所有者的名称“Patricsme”,但这不是我选择查看的名称(我选择了“DragonGiggs”名称,您可以在第二张照片上看到,这是数据的名称我发布了 Firebase 的内容。

enter image description here

所以我的问题是如何在 UserViewController 中显示该标记的正确名称?

我尝试使用此代码执行此操作,但无法工作:

func seeProfile(_ sender: AnyObject) {
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Profile") as! UserViewController

let usersRef = ref.child("markers")
usersRef.observeSingleEvent(of: .value, with: { (snapshot) in
if (snapshot.value is NSNull) {
print("No data")
} else {
for child in snapshot.children {
let userSnap = child as! DataSnapshot
let uid = userSnap.key
let userDict = userSnap.value as! [String: AnyObject]
let name = userDict["nom"] as! String
vc.name.text = name
let key = userDict["key"] as! String
vc.numRoom = key
let photo = userDict["photoURL"] as! String
vc.photoURL = photo
let titre = userDict["titreEvent"] as! String
vc.titre = titre
}
}
})
present(vc, animated: true, completion: nil)
}

我把这个函数放在这里:

alertController.addAction(UIAlertAction(title: "See profile", style: .default, handler: self.consulterProfil))

此代码总是找到我的 Firebase 数据库上的最后数据,我找不到解决此问题的方法。

这是 UserViewController:

class UserViewController: UIViewController {

@IBOutlet weak var name: UILabel! // pseudo
@IBOutlet weak var image: UIImageView! // userImg

var ref: DatabaseReference!
var photoURL: String!
var room: Room!
var numRoom: String!
var titre: String!

override func viewDidLoad() {
super.viewDidLoad()

let ref = Storage.storage().reference(forURL: photoURL)
ref.getData(maxSize: 1 * 1024 * 1024, completion: { (data, error) in
if error != nil {
print("Impossible de télécharger l'image depuis Firebase car \(error?.localizedDescription)")
} else {
if let imgData = data {
if let img = UIImage(data: imgData) {
DispatchQueue.main.async {
self.image.image = img
}
}
}
}
})
DispatchQueue.main.async {
self.image.reloadInputViews()
}
}
}

其他问题,照片无法在imageView上显示。

感谢您的帮助。

最佳答案

看起来您正在 firebase 回调之外呈现您的用户个人资料 View Controller 。换句话说,在显示个人资料之前,您对 usersRef.observeSingleEvent 的调用中的数据尚未返回。尝试将其更改为 -

func seeProfile(_ sender: AnyObject) {
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Profile") as! UserViewController

let usersRef = ref.child("markers")
usersRef.observeSingleEvent(of: .value, with: { (snapshot) in
if (snapshot.value is NSNull) {
print("No data")
} else {
for child in snapshot.children {
let userSnap = child as! DataSnapshot
let uid = userSnap.key
let userDict = userSnap.value as! [String: AnyObject]
let name = userDict["nom"] as! String
vc.name.text = name
let key = userDict["key"] as! String
vc.numRoom = key
let photo = userDict["photoURL"] as! String
vc.photoURL = photo
let titre = userDict["titreEvent"] as! String
vc.titre = titre
}
}
// This needs to be inside the callback
present(vc, animated: true, completion: nil)
})

您可能还希望将其移至 if 语句中,以防配置文件未返回。

关于swift - Firebase 如何在单击按钮时在另一个 viewController 中显示右子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154507/

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