编辑 我正在制作一个使用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存储。