【问题标题】:How do I add a printed item to Firebase Database?如何将打印项目添加到 Firebase 数据库?
【发布时间】:2017-10-24 02:35:57
【问题描述】:

我正在尝试获取打印的项目并将其与其他网点一起插入到我的 Firebase 数据库中。谢谢!

@objc(imagePickerController:didFinishPickingMediaWithInfo:) func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        myImageView.image = image  
    } else {
        //error
    }

    self.dismiss(animated: true, completion: nil)

    let storageRef = FIRStorage.storage().reference().child("myImage.png")
    if let uploadData = UIImagePNGRepresentation(self.myImageView.image!) {
        storageRef.put(uploadData, metadata: nil, completion:
        {
                (metadata, error) in
                if error != nil {
                    print("error")
                    return
                } else {
                    print((metadata?.downloadURL()?.absoluteString)!)
                   //i want to take the line above and insert it into the database
                }
        })
     }           
}

@IBAction func addPost(_ sender: Any) {

    if self.titleText.text != "" && self.authorText.text != "" && self.mainText.text != "" && self.dateText.text != "" {
        ref?.child("Posts").childByAutoId()
                           .setValue(["Title": titleText.text,
                                      "Article": mainText.text,
                                      "Author": authorText.text,
                                      "Date": dateText.text ])

        //insert the download URL above 
        self.performSegue(withIdentifier: "kost", sender: self)    
    }
}

【问题讨论】:

  • 我的回答有帮助吗,也许对您的问题的进一步解释会有所帮助
  • 在这里回答了您的问题。 stackoverflow.com/a/44061967/5878081
  • 你能具体解释一下什么不起作用吗?可能有一些编码错误; storageRef.put(uploadData, metadata: nil, completion: 应该是 storageRef.putData(uploadData, metadata: nil) { (metadata, error) in。见@ 987654323@了解详情。

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

我明白你现在的问题了。您正在以完全错误的方式将图像上传到 firebase。在事件didFinishPickingMediaWithInfo 中,您不应该对firebase 做任何事情。您应该只将您的 UIImageViews 图像设置为存储从图像选择器提供的数据的值。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    self.dismiss(animated: true, completion: nil)
    if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage{
        myImageView.image = editedImage
    }else{
        print("Something went wrong")
    }
}

然后在您的 IBAction 中,您应该将所有内容上传到 firebase。这是一个简单的函数,可以将你的图片上传到数据库中:

func uploadImage(){
    if let fileData = UIImageJPEGRepresentation(myImageView.image!, 0.8){
    let storageRef = storage.reference().child("images").child("testImage.jpg")
        storageRef.put(fileData, metadata: nil, completion: { (metadata, error) in
            if error != nil{
                print(error?.localizedDescription ?? "error")
                return
            }
            let downloadURL = metadata?.downloadURL()?.absoluteString
            // Write the download URL to your Database
            self.ref?.child("images").setValue(downloadURL)
        })
    }else{
        print("error")
    }
}

【讨论】:

  • 这句话在 firebase 闭包中很难设置变量 是完全不准确的。类变量可以很容易地在闭包中设置; self.var_name 或 self.myArray.append(snapshot) 每次都有效。
猜你喜欢
  • 1970-01-01
  • 2017-02-10
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多