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