Как бы я назначил URL фотографии, выбранной в UIImagePickerController, для UILabel в быстром? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь назначить URL выбранного изображения из UIImagePickerController для UILabel в быстром Xcode.Данные изображения должны быть сохранены в базе данных реального времени Firebase и в хранилище Firebase.Однако сейчас он не сохраняет URL-адрес в базе данных, но сохраняет изображение в хранилище.

У меня есть способ выбрать из библиотеки фотографий.

    // UIImagePickerControllerDelegate
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    guard let selectedImage = info[.originalImage] as? UIImage else {
        fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
    }

    // Set photoImageView to display selected image
    photoImageView.image = selectedImage

    // Dismiss picker
    dismiss(animated: true, completion: nil)

    let mediaType = info[UIImagePickerController.InfoKey.mediaType] as! NSString
    if mediaType.isEqual(to: kUTTypeImage as String) {
        let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
        photoImageView.image = image

        if newPic == true {
            UIImageWriteToSavedPhotosAlbum(image, self, #selector(imageError), nil)
        }
    }
}
// Cancel image picker
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}

У меня также есть функция загрузки фото здесь ...

    func uploadPhoto(completion: @escaping (_ url: String?) -> Void) {

    let photoName = NSUUID().uuidString
    let storageRef = Storage.storage().reference().child("photoURL").child("\(photoName).jpg")

    let photo = self.photoImageView.image!

    if let uploadData = photo.jpegData(compressionQuality: 0.5) {
        storageRef.putData(uploadData, metadata: nil) { (metadata, error) in

            guard metadata != nil else {
                // Uh-oh, an error occurred!
                return
            }

            // You can also access to download URL after upload.
            storageRef.downloadURL { (url, error) in
                print(url!)

                guard url != nil else {
                    // Uh-oh, an error occurred!
                    return
                }


                let urlStr:String = (url?.absoluteString) ?? ""
                print(urlStr)

                print("Label before:\(String(describing: self.urlLabel.text))")
                self.urlLabel.text = "\(urlStr)"
                print("Label after:\(String(describing: self.urlLabel.text))")

            }
        }
    }
}

И этот метод для сохранения его в базе данных и хранилище ...

func addPhoto() {
    self.refPhoto = Database.database().reference().child("photos");

    let key = self.refPhoto.childByAutoId().key
    let photo = [  "id" : key!, "photoURL" : self.urlLabel.text!] as [String: Any]

    self.refPhoto.child((Auth.auth().currentUser?.uid)!).child(key!).updateChildValues(photo)

    uploadPhoto() { url in
        self.urlLabel.text = url
        let url = ["photoURL" : self.urlLabel.text!]
        self.refPhoto.child((Auth.auth().currentUser?.uid)!).updateChildValues(url)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...