我环顾四周并尝试了不同的查询,但似乎都没有。
我有一个社交网络iOS应用程序。当我更改用户的个人资料图片时,我需要此特定用户发布的所有帖子,以便更新并显示新的个人资料图片。我有这个当前用户的userId。
似乎唯一的方法是查询此用户发布的所有帖子,然后循环遍历它们并更新图片网址。但我不确定如何执行此查询。
这就是数据库的posts节点的样子。
posts
post1ID (e.g. -TaldfjWEFa92SASnKN)
name: ”Jack Johnson”
profileImageUrl: ”https://firebasestorage.googleapis.com/….”
userId: "UekUSYobEKZYO9WqXJQu2"
-asjfka1ADFAJ23klja=
name: "Karin Bold"
profileImageUrl: ”https://firebasestorage.googleapis.com/….”
userId: "YobEKZYIUxqXJQu2dl2AD"
相关代码:
if let imgData = UIImageJPEGRepresentation(img, 0.1) {
let imgUid = NSUUID().uuidString
let metadata = StorageMetadata()
let imagesRef = DataService.instance.imagesStorageRef.child(imgUid)
imagesRef.putData(imgData, metadata: metadata, completion: { (metadata, error) in
if error != nil {
//show alert
} else {
let downloadURL = metadata?.downloadURL()?.absoluteString
if let url = downloadURL {
changeRequest?.photoURL = URL(string: url)
changeRequest?.commitChanges() { (error) in
if error == nil {
//get all the posts created by this user id
//update profile image url in all of them
self.userImageUrlRef = DataHandler.instance.postsRef.child("userId").queryOrdered(byChild: AuthHandler.instance.currentUserId).ref //child(AuthHandler.instance.currentUserId).child("profileImgUrl")
self.userImageUrlRef.updateChildValues(["profileImageUrl" : url])
} else {
//show alert
}
}
}
}
})
}
答案 0 :(得分:0)
您分享的相关代码是:
DataHandler.instance.postsRef
.child("userId")
.queryOrdered(byChild: AuthHandler.instance.currentUserId)
.ref
这真的是一种非常有创意的方式。您需要将其更改为在您需要的字段上排序的查询,然后使用您需要的值进行过滤。所以:
let query = DataHandler.instance.postsRef
.queryOrdered(byChild: "userId")
.queryEqual(toValue: AuthHandler.instance.currentUserId)
然后将侦听器附加到该查询,您应该获取当前用户的帖子。要更新它们,请循环显示结果并依次更新每个结果:
ref.observeSingleEvent(of: .value, with: { (snapshot) in
let childUpdates = ["profileImageUrl": url]
for child in snapshot.children.allObjects as [FIRDataSnapshot] {
child.ref.updateChildValues(childUpdates, withCompletionBlock: { (error, ref) in
})
}
})
请注意,如果您始终关注始终显示正确的配置文件信息,则应考虑不在每个帖子中存储该信息,而是仅将其存储在/users/$uid/profileImageUrl
节点中。