我使用以下代码更新Firebase中的个人资料照片:
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)
}
updateProfilePic是一个触发childChanged的功能,因此用户可以下载新的配置文件pic。它没有工作,我认为这是因为它在StorageReference完成更新之前被调用。是否有任何方法可以确保仅在参考完成后调用该函数?
答案 0 :(得分:1)
对于仅在完成块运行时需要调用的代码,您应该将所述代码放在完成块中,因此请更改:
ref.put(imageData!, metadata: nil) {
(metaData, error) in
completion(error)
}
updateProfilePic(userUID)
到
ref.put(imageData!, metadata: nil) {
(metaData, error) in
guard error == nil else {
print("Error from adding to FIRDatabase: \(error)")
return
}
self.updateProfilePic(userUID)
}
如果在完成块成功后必须始终调用updateProfilePic
答案 1 :(得分:0)
要确保在上传完成后调用updateProfilePic()
,请将其移至回调/完成处理程序:
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)
}
}