編輯 我正在製作一個使用Swift並使用Firebase的應用。在應用程序中,我使用相機以及相機膠捲。來自相機/相機的圖片只能上傳到Firebase一次
用戶需要填寫2個文本框以啓用下一個按鈕,但是可以選擇拍攝或使用照片。
我已經測試過我的應用程序,只需填寫所需的文本框和創建一個帳戶,它的工作正常,但如果我添加圖像它只能在第一次。
這是委託方法代碼
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
print(editedImage)
selectedImageFromPicker = editedImage
} else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
print(originalImage)
selectedImageFromPicker = originalImage
}
if let selectedImage = selectedImageFromPicker {
accountImageView.image = selectedImage
}
dismiss(animated: true, completion: nil)
}
我使用寫火力地堡數據庫和存儲因而
...
let account = ref.child("accounts").childByAutoId()
...
if selectedImageFromPicker != nil {
if let tempData = UIImagePNGRepresentation(selectedImageFromPicker!) {
storageRef.put(tempData, metadata: nil) { (metadata, error) in
if error != nil {
print(error!)
return
}
self.accountMetadata = metadata?.downloadURL()
if let tAccountName = self.accountName,
let tAccountEmail = self.accountEmail,
let tProfileImageUrl = metadata?.downloadURL()?.absoluteString {
account.setValue(["accountName": tAccountName,
"accountEmail": tAccountEmail,
"accountImage": tProfileImageUrl,
"accountHasImage": true])
}
print(metadata!)
}
}
} else {
if let tAccountName = accountName,
let tAccountEmail = accountEmail {
account.setValue(["accountName": tAccountName,
"accountEmail": tAccountEmail,
"accountImage": "",
"accountHasImage": false])
}
}
ref.child("users").child((user?.uid)!).child("accounts").child(account.key).setValue(true)
}
目前的代碼,正在發生的事情是,當我啓動應用程序,並嘗試添加一個帳戶,並在第一次使用相機/相機膠捲,然後點擊提交按鈕它將正常工作。它創建帳戶節點,然後創建用戶節點中該帳戶節點的引用以及存儲中的映像。但是,如果我嘗試添加第二個帳戶與另一張圖片,它不會添加帳戶節點或存儲中的圖像,但它確實創建用戶節點中的帳戶節點的引用(這是一個問題)。
這是一個問題,因爲在我的UICollectionView中,當我嘗試拉取所有帳戶時,它看到它有一個對一個孩子的引用,然後試圖拉那個孩子,並且因爲那個孩子實際上並不存在得到一個崩潰。
我不確定我是否使用了正確的Firebase術語。我以前的應用程序在結構上與此應用程序類似,所以我知道它應該可以工作。我唯一改變的是添加相機功能和Firebase存儲。