【发布时间】:2017-12-12 05:16:38
【问题描述】:
我正在尝试拍摄 3 张图片并将其发布到 Firebase 存储中,然后获取下载 URL 并将其放入 Firebase 数据库中。我的代码只上传第一张图片,但如果有第二张就不会上传任何东西。
@IBOutlet weak var titleText: UITextField!
@IBOutlet weak var subtitleText: UITextField!
@IBOutlet weak var authorText: UITextField!
@IBOutlet weak var dateText: UITextField!
@IBOutlet weak var articleText: UITextView!
@IBOutlet weak var tagsText: UITextField!
@IBOutlet weak var myImageView1: UIImageView!
@IBOutlet weak var myImageView2: UIImageView!
@IBOutlet weak var myImageView3: UIImageView!
@IBOutlet weak var postType: UITextField!
@IBOutlet weak var postStyle: UITextField!
var ref:DatabaseReference?
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
let tapGestureRecognizer1 = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
myImageView1.isUserInteractionEnabled = true
myImageView1.addGestureRecognizer(tapGestureRecognizer1)
let tapGestureRecognizer2 = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
myImageView2.isUserInteractionEnabled = true
myImageView2.addGestureRecognizer(tapGestureRecognizer2)
let tapGestureRecognizer3 = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
myImageView3.isUserInteractionEnabled = true
myImageView3.addGestureRecognizer(tapGestureRecognizer3)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
var selected = 0
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer){
let image = UIImagePickerController()
image.delegate = self
image.sourceType = UIImagePickerControllerSourceType.photoLibrary
image.allowsEditing = false
let tappedImage = tapGestureRecognizer.view as! UIImageView
selected = tappedImage.tag
self.present(image, animated: true)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
if let myImageView1 = self.view.viewWithTag(selected) as? UIImageView {
myImageView1.image = image
}
} else {
//error
}
self.dismiss(animated: true, completion: nil)
}
@IBAction func upload(_ sender: Any) {
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png")
if let uploadData = UIImagePNGRepresentation(self.myImageView1.image!) {
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
let storageRef2 = Storage.storage().reference().child("images2/\(NSUUID().uuidString)/image2.png")
if let uploadData2 = UIImagePNGRepresentation(self.myImageView2.image!) {
storageRef2.putData(uploadData2, metadata: nil, completion: { (metadataSecond, error) in
if error != nil {
print("error")
return
} else {
let downloadURL = metadata?.downloadURL()?.absoluteString
let downloadURL2 = metadataSecond?.downloadURL()?.absoluteString
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "Download URL": (downloadURL), "Download URL 2": (downloadURL2)])
}
self.performSegue(withIdentifier: "segue321", sender: self)
}
【问题讨论】:
-
看起来您在
imagePickerController函数中将图像分配给myImageView1,但其他UIImageViews 没有分配图像。不过,我可能误解了您在代码中选择图像的位置。 -
那么它应该是什么样子?
-
在图片 1 上传关闭中放置一个断点。你的闭包被调用了吗?如果是这样,由于您的第二张图片未上传,它在哪里失败?
-
@Riccardo 检查我的编辑是否有修补的错误
标签: ios swift firebase swift3 firebase-realtime-database