0
私はユーザーが自分の写真をアップロードするために使用している2つのイメージビューを持っています。メインプロファイルの画像をアップロードするとすべて正常に動作し、画像は適切なFirebaseストレージの子供に保存されますが、次の画像をアップロードして次の画像をアップロードすると、間違ったFirebase Storageに保存されます。UIImagepickerが間違ったFirebaseストレージにアップロードされています
私は2つの別々のuiimageピッカーを持つことでこの問題を解決しようとしましたが、それは問題を解決していないようです。だから私の質問は、SecondPhoto
を押すと、なぜそれがProfile_Images
にアップロードされ、私が欲しいものではないSecond_Images
にアップロードされているのですか?
import UIKit
import Firebase
import FBSDKLoginKit
class ProfileViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var secondPhoto: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
self.imageView.frame.size.width/2;
self.imageView.layer.cornerRadius = 24
self.imageView.clipsToBounds = true;
self.secondPhoto.layer.cornerRadius = self.secondPhoto.frame.size.height/2;
secondPhoto.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSecondProfileImageView)))
profilePicture.addGestureRecognizer(UITapGestureRecognizer(target:self, action: #selector(handleSelectProfileImageView)))
let uid = FIRAuth.auth()?.currentUser?.uid
FIRDatabase.database().reference().child("Users").child(uid!).observeSingleEvent(of: .value, with: {(snapshot) in if let dictionary = snapshot.value as? [String: AnyObject]
{
self.imageView.loadImageUsingCachWithUrlString(urlString:dictionary["profileImageUrl"] as! String)
self.secondPhoto.loadImageUsingCachWithUrlString(urlString:dictionary["secondImageUrl"] as! String)
}
}, withCancel: nil)
}
func handleSelectProfileImageView() {
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion:nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
var selectedImageFromPicker:UIImage?
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage{
selectedImageFromPicker = editedImage
}else if let originalImage = info["UIIMagePickerControllerOriginalImage"] as? UIImage{
selectedImageFromPicker = originalImage
}
if let selectedImage = selectedImageFromPicker{
updateProfileImageInFirebase(image: selectedImage)
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
print("canceled picker")
dismiss(animated: true, completion: nil)
}
func updateProfileImageInFirebase(image: UIImage){
let user = FIRAuth.auth()?.currentUser
guard let uid = user?.uid else {
return
}
if user != nil {
let imageName = NSUUID().uuidString
let storageRef = FIRStorage.storage().reference().child("Profile_Images").child("\(imageName).jpg")
if let uploadData = UIImageJPEGRepresentation(image, 0.1) {
storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil {
print(error!)
return
}
if let profileImageUrl = metadata?.downloadURL()?.absoluteString {
FIRDatabase.database().reference().child("Users").child(uid).updateChildValues(["profileImageUrl": profileImageUrl])
}
})
}
}
}
func handleSecondProfileImageView() {
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion:nil)
}
func secondimagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
var selectedImageFromPicker:UIImage?
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage{
selectedImageFromPicker = editedImage
}else if let originalImage = info["UIIMagePickerControllerOriginalImage"] as? UIImage{
selectedImageFromPicker = originalImage
}
if let selectedImage = selectedImageFromPicker{
updatesecondAvatarImageInFirebase(image: selectedImage)
}
dismiss(animated: true, completion: nil)
}
func secondimagePickerControllerDidCancel(_ picker: UIImagePickerController) {
print("canceled picker")
dismiss(animated: true, completion: nil)
}
func updatesecondAvatarImageInFirebase(image: UIImage){
let user = FIRAuth.auth()?.currentUser
guard let uid = user?.uid else {
return
}
if user != nil {
let imageName = NSUUID().uuidString
let storageRef = FIRStorage.storage().reference().child("Second_Images").child("\(imageName).jpg")
if let uploadData = UIImageJPEGRepresentation(image, 0.1) {
storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil {
print(error!)
return
}
if let secondImageUrl = metadata?.downloadURL()?.absoluteString {
FIRDatabase.database().reference().child("Users").child(uid).updateChildValues(["secondImageUrl": secondImageUrl])
}
})
}
}
}
}
を使用することによってそれを解決することができました –