Ios Swift Firebase存储-更新数据时,图像从应用程序中消失

Ios Swift Firebase存储-更新数据时,图像从应用程序中消失,ios,swift,firebase,firebase-storage,Ios,Swift,Firebase,Firebase Storage,我在更新数据方面遇到了问题。如下图所示,当我更改这三个文本字段但保留当前图像并点击“保存”时,它将更新Firebase中的数据,但也将上载一个空的新图像,因此用户将看到一个空的UIImageView 为什么呢 这是我从Firebase保存图像(数据)和下载URL的方法: func saveImageToStorage(cellImage: Data, completion: @escaping(Result<String, Error>) -> Void) { gu

我在更新数据方面遇到了问题。如下图所示,当我更改这三个文本字段但保留当前图像并点击“保存”时,它将更新Firebase中的数据,但也将上载一个空的新图像,因此用户将看到一个空的UIImageView

为什么呢

这是我从Firebase保存图像(数据)和下载URL的方法:

func saveImageToStorage(cellImage: Data, completion: @escaping(Result<String, Error>) -> Void) {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    refStorage.child(uid).child(imageName).putData(cellImage, metadata: nil) { (_, error) in
        guard error == nil else {
            completion(.failure(NSError(domain: "Saving image to storage failed", code: 0)))
            return
        }
        
        self.refStorage.child(uid).child(self.imageName).downloadURL { (url, error) in
            guard let url = url, error == nil else { return }
            let urlString = url.absoluteString
            completion(.success(urlString))
            print("URL downloaded: \(urlString)")
        }
    }
}
更新药物治疗方法所在的ViewModel:

  func updateMedicationInfo(data: Data, pillName: String, capacity: String, dose: String, childId: String, completion: @escaping () -> Void) {
    firebaseManager.saveImageToStorage(cellImage: data) { (result) in
        switch result {
        case .failure(let error):
            print(error.localizedDescription)
        case .success(let url):
            self.firebaseManager.updateMedicationInfo(pillName: pillName, capacity: capacity, dose: dose, cellImageURL: url, childId: childId)
        }
        completion()
    }
}
谢谢你的建议

干杯

  func updateMedicationInfo(data: Data, pillName: String, capacity: String, dose: String, childId: String, completion: @escaping () -> Void) {
    firebaseManager.saveImageToStorage(cellImage: data) { (result) in
        switch result {
        case .failure(let error):
            print(error.localizedDescription)
        case .success(let url):
            self.firebaseManager.updateMedicationInfo(pillName: pillName, capacity: capacity, dose: dose, cellImageURL: url, childId: childId)
        }
        completion()
    }
}