0

我有兩個圖像視圖,我曾經讓用戶上傳他們的照片。當我上傳主要個人資料照片時,一切運行良好,圖片會存儲在相應的Firebase存儲子項中,但當按下下一張圖片視圖上傳我的下一張照片時,它會存儲在錯誤的Firebase存儲中。UIImagepicker正在上傳到錯誤的Firebase存儲空間

我試圖解決這個問題有兩個單獨的uiimagepickers,但似乎並沒有解決這個問題。所以我的問題是,爲什麼當我按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]) 
       } 
      }) 
     } 
    } 
} 

}

+0

來解決這個問題,您可以使用特定的ImagePath每一個圖片/的UIImageView –

回答

0

我能夠通過添加添加標記的按鈕,並使用一個開關控制

相關問題