Я пытаюсь назначить 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)
}
}