【问题标题】:How can I store data derived from Firebase, converted to an UIImage, to an UIImage array?如何将源自 Firebase、转换为 UIImage 的数据存储到 UIImage 数组?
【发布时间】:2019-09-03 20:10:09
【问题描述】:

我正在尝试检索从数据库中保存的图片(在这种情况下,我硬编码了我想要从数据库中获取的确切图片)。我启动了两个UIImage 变量:imageViewrawImage。 imageView 使用来自FirebaseUISDWebImage 加载图像,但我不知道如何将其保存到 UIImage 数组中。

rawImage 正在从 Firebase 的确切图像的路径中获取数据。我正在将它转换为 UIImage,但是当我想将它附加到我的 UIImage 数组时,应用程序崩溃了。

class GalleryViewController:UIViewController{
    @IBOutlet weak var imageView: UIImageView!

    @IBOutlet weak var rawImage: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addVerticalGradientLayer(topColor: primaryColor, bottomColor: secondaryColor)
        self.tabBarController?.tabBar.isHidden = true
        retrievePicture()
    }

    func retrievePicture()
    {
        guard let user_email = Auth.auth().currentUser?.email else { return }
        let storageRef = Storage.storage().reference()

        // Reference to an image file in Firebase Storage
        let reference = storageRef.child("\(user_email)").child("/top").child("1.jpg")

        // UIImageView in your ViewController
        let imageView: UIImageView = self.imageView

        // Placeholder image
        let placeholderImage = UIImage(named: "placeholder.jpg")
        //UploadViewController.Clothing.top_images.append(<#UIImage#>)

        // Load the image using SDWebImage
        imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)


        // this is the code for the rawImage portion I described above
        reference.getData(maxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                print("Error \(error)")
            } else {
                let picture = UIImage(data: data!)
                UploadViewController.Clothing.top_images.append(picture!)
            }
        }

        // loading the image to the rawImage imageview
            rawImage.image = UploadViewController.Clothing.top_images[0]

    }
}

【问题讨论】:

    标签: arrays swift firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    您忽略了强制展开选项,我建议您删除 ! 的用法以避免崩溃,改用下面的

    reference.getData(maxSize: 1 * 1024 * 1024) { data, error in
        guard let data = data else {
            print(error?.localizedDescription ?? "Check remote url or service")
            return
        }
    
        if let picture = UIImage(data: data) {
            UploadViewController.Clothing.top_images.append(picture)
        } else {
            print("Invalid image data\n\(String(data: data, encoding: .utf8))")
        }
    }
    

    或跟随 if 语句是安全的

    if error == nil && data != nil, let picture = UIImage(data: data!) {
        UploadViewController.Clothing.top_images.append(picture)
    }
    

    你也可以试试不带斜杠的路径,像这样:

    let reference = storageRef.child("\(user_email)/top/1.jpg")
    

    【讨论】:

      【解决方案2】:

      如果您已经使用 SDWebImage 加载图像,那么您也可以将图像附加到 UIImage 数组中。

      只需将 SDWebImage 与这样的完整块一起使用

      var arr_image = [UIImage]()
      
      imageView.sd_setImage(with: reference_url, placeholderImage: UIImage(named: "placeholder.jpg"), options: options: [.highPriority]) { (img, error, cachtype, url) in
          if img != nil{
              arr_image.append(img) // append UIimage in array 
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        相关资源
        最近更新 更多