ios - 将图像同步上传到 Firebase

标签 ios swift firebase

我正在尝试将产品上传到数据库,并且希望将所有信息写入一次事务中。虽然确实会发生这种情况,但上传的图像不会发生这种情况。这是我的代码:

let storageRef = Storage.storage().reference().child("ProductsImages").child(product.UniqueID()).child("MainImage.png")
            if let mainChosenImage = self.selectedImageToUpload
            {
                if let uploadData = UIImageJPEGRepresentation(mainChosenImage, 0.2)
                {
                    storageRef.putData(uploadData, metadata: nil)
                    {
                        (StorageMetaData, error) in
                        if error != nil
                        {
                            // MARK - Print error
                            return
                        }

                        self.mainImageURL = StorageMetaData?.downloadURL()?.absoluteString
                        if let urlString = self.mainImageURL
                        {
                            self.ref.child("Products").child(product.UniqueID()).child("MainImage").setValue(urlString)
                            self.ref.child("Users").child(user.uid).child("Products").child(product.UniqueID()).child("MainImage").setValue(urlString)
                            product.AddImageURLToProduct(URL: urlString)
                        }
                    }
                }
            }
            product.RegisterProductOnDatabase(database: self.ref)
            self.performSegue(withIdentifier: "unwindToMyProductsViewController", sender: self)

我的产品注册代码:

public func RegisterProductOnDatabase(database dataBase: DatabaseReference)
{
    // Run in one transaction

    let key = dataBase.child("Products").child(self.UniqueID()).key
    let thisProductToRegister : [String:Any] = [
                            "Name": self.Name(),
                            "UniqueID": self.UniqueID(),
                            "Price": self.Price(),
                            "Description": self.Description(),
                            "ToBuy?": self.IsToBuy(),
                            "ToSell?": self.IsToSell(),
                            "Owner": self.m_Owner,
                            "Amount": self.Amount(),
                            "MainImage": self.m_PicturesURLs.first
                          ]

    let childUpdates = ["/Products/\(key)/": thisProductToRegister,
                        "/Users/\(self.m_Owner)/Products/\(key)/": thisProductToRegister]

    dataBase.updateChildValues(childUpdates)

}

我希望在执行 segue 之前注册完整的产品。我怎样才能做到这一点 ?

截至目前,产品已注册,执行segue,产品使用默认图像加载到 CollectionView,然后将产品图像写入 Firebase,然后加载到 collectionView。我希望我的产品从一开始就加载正确的图像

最佳答案

这个想法是嵌套网络调用,并在最后一个 perfromSegue

 CallAPI1
  {
     if(sucess)
     {  
            CallAPI2
            {
              if(sucess)
              {  
                  self.performSegue(withIdentifier: "unwindToMyProductsViewController", sender: self)

              }
            }
     }
  }

关于ios - 将图像同步上传到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846261/

相关文章:

ios - 在 Swift 中,我应该如何保存自定义 View 中的数据,以便在单元格出队时不删除它?

ios - 使用多个 AVPlayer 时如何检测哪个视频结束了?

swift - 更改键盘动画弹跳的 Storyboard约束

swift - 如何使用新的 swift async/await 方法上传数据?

firebase - 如何在列表中添加新项目?

ios - 如何在 Apple Silicon ('M1' ) 上构建 Google Analytics SDK 使其在 Xcode Simulator 中运行?

iphone - 你如何只在 UIView 的填充之外显示阴影?

xcode - Swift:如何子类化 UIButton?

android - 仅在开发设备上测试 Googles Firebase 通知

android - java.lang.NoClassDefFoundError : Failed resolution of: Lcom/squareup/okhttp/OkHttpClient error when using Picasso offline capability - Android 错误