gpt4 book ai didi

ios - Swift 中的 Firebase .childChanged 问题

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

我使用 Firebase 保存用户个人资料信息。因为您无法收听存储引用,所以我向数据库添加了一个子项,每次用户更改其个人资料图片时该子项都会更改(只是随机生成的 uuidString 。我验证了它确实在 firebase 中发生了变化,并且新的子项位于相同的位置)位置与其他人一样。每当用户更改其信息时,正在查看该个人资料的用户应该会看到更改,因此我对此进行了测试。即使 child 正在更改,个人资料图片也不会发生变化。但是,如果用户更改了另一条信息,我用bio测试了它,配置文件将更新,以及最新的配置文件图片。代码的中期调试版本如下:

    let ref = DatabaseReference.allUsers.reference()
let query = ref.queryOrdered(byChild: "uid").queryEqual(toValue: (user.uid))

query.observe(.childChanged, with: { snapshot in
let user = User(dictionary: snapshot.value as! [String : Any])
self.user = user
self.bio.text = user.bio
self.user?.fullName = user.fullName
self.user?.instagram = user.instagram
self.user?.facebook = user.facebook
self.user?.phone = user.phone
self.user?.email = user.email

})

//let ref2 = DatabaseReference.users(uid: user.uid).reference()
//let query2 = ref2.child("updatePic")

query.observe(.childChanged, with: { snapshot in
let user = User(dictionary: snapshot.value as! [String : Any])

self.user?.downloadProfilePicture { [weak self] (image, error) in
self?.profilePicture.image = image
let profilePictureKey = "\(user.uid)-headerImage"
self?.cache?.setObject(image, forKey: profilePictureKey)
}
})

到目前为止,我一直摸不着头脑,因为我不知道我可能会错过什么。基本上,即使我看着 child 在我眼前发生变化,它也没有意识到 child 发生了变化。有什么想法吗?

更新:是否有可能在触发 childChanged 时个人资料照片尚未完成更新,因此正在下载相同的照片?这是我当前更改照片的代码:

    extension FIRImage {
func saveProfileImage(_ userUID: String, _ completion: @escaping (Error?) -> Void) {
let resizedImage = image.resized()
let imageData = UIImageJPEGRepresentation(resizedImage, 1.0)

ref = StorageReference.profileImages.reference().child(userUID)
downloadLink = ref.description

ref.put(imageData!, metadata: nil) {
(metaData, error) in
completion(error)
}
updateProfilePic(userUID)
}
func updateProfilePic(_ userUID: String) {
var randomString = UUID().uuidString
let ref = DatabaseReference.users(uid: userUID).reference()
ref.child("updatePic").setValue(randomString)
}

最佳答案

我不完全确定这是否是问题的原因,但您绝对应该考虑将用户存储在如下结构中:

users: {
uid1: {
name: "Sudacris"
profilePic: "https://www.gravatar.com/avatar/60fa08515b157ef927d885a4217c0f76?s=32&d=identicon&r=PG&f=1"
},
uid1: {
name: "Frank van Puffelen"
profilePic: "https://www.gravatar.com/avatar/12d378e6a9788ab9c94bbafe242b82b4?s=48&d=identicon&r=PG"
}
}

这使您无需查询即可查找特定用户。您只需直接查找即可:

let ref = DatabaseReference.allUsers.reference()
let userRef = ref.child(user.uid)

userRef.observe(.value, with: { snapshot in
let user = User(dictionary: snapshot.value as! [String : Any])
...

关于ios - Swift 中的 Firebase .childChanged 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981803/

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