私はSwiftを使ってFirebaseを使ってアプリケーションを作っています。アプリでは、カメラロールとカメラロールを使用します。Camera/Cameraの画像はFirebaseに一度だけアップロードする
ユーザは、次のボタンを有効にするために2つのテキストフィールドを入力する必要がありますが、画像の撮影または使用はオプションです。
必要なテキストフィールドに入力してアカウントを作成するだけでアプリをテストしましたが、正常に動作しますが、画像を追加すると初めて動作します。
これは私がFirebaseデータベースとストレージへの書き込みを使用していたコードは現在、何が起こっていることは、私はアプリを起動すると、そのよう
...
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)
}
ですデリゲートメソッドのコード
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)
}
ですアカウントを追加して、初めてカメラ/カメラロールを使用し、送信ボタンをタップすると正常に動作します。アカウントノードを作成し、そのアカウントノードへの参照をユーザーノードに作成し、ストレージ内のイメージを作成します。しかし、2番目のアカウントに別の画像を追加しようとすると、アカウントノードまたは画像がストレージに追加されるのではなく、ユーザーノードのアカウントノードへの参照が作成されます(これは問題です)。
私のUICollectionViewでは、すべてのアカウントを取得しようとすると、子への参照があることがわかり、その子をプルしようとしています。クラッシュする
適切なFirebaseの用語を使用しているかどうかはわかりません。私の以前のアプリは、このアプリと構造が似ているので、うまくいくはずです。私が変更したのは、カメラ能力とFirebase Storageを追加することだけです。