SDWebImage不接受来自Firebase存储的StorageReference

时间:2018-01-10 17:42:17

标签: swift firebase-storage firebaseui sdwebimage

我正在尝试在UITableView上显示Firestore和Google Storage的数据。

我有一个自定义单元格设置,它有自己的类名为" PriceGuideCell"

在安装FirebaseUI / Storage pod之后,我尝试使用Firebase网站上显示的方法。

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PriceGuideCell
                var item = itemData[indexPath.row]

      let reference: StorageReference = storageRef.child("test/\(item.itemID!).jpg")

                    cell.nameLabel?.text = item.name
                    cell.yearLabel?.text = String(item.year)
                    cell.boxnumLabel?.text = String(item.boxnum)
                    cell.itemImage?.sd_setImage(with: reference, placeholderImage: #imageLiteral(resourceName: "placeholder"))

                }
            }

            return cell
    }

上面的代码给了我一个错误:

Cannot convert value of type 'StorageReference' to expected argument type 'URL'

下面的代码,使用(参考).downloadURL,我已经开始工作了,但我不知道这是不是最好的做法:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PriceGuideCell
            var item = itemData[indexPath.row]

            let imageURLRef = storageRef.child("test/\(item.itemID!).jpg")

            imageURLRef.downloadURL { url, error in
            if let error = error {
                print("There's an error:\(error)")
            } else {

                cell.nameLabel?.text = item.name
                cell.yearLabel?.text = String(item.year)
                cell.boxnumLabel?.text = String(item.boxnum)
                cell.itemImage?.sd_setImage(with: url, placeholderImage: #imageLiteral(resourceName: "placeholder"))


            }
        }

        return cell
    }

我是否需要为sd_setImage安装其他东西才能接受StorageReference?另外,我的Podfile目标是9.0。关于使用8.0,有一些in the FirebaseUI readme。我不知道这是否会影响它,但对于我的项目使用的其他一些pod来说,8.0太低了。

2 个答案:

答案 0 :(得分:0)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PriceGuideCell
                var item = itemData[indexPath.row]

      let referenceImage: StorageReference = storageRef.child("test/\(item.itemID!).jpg")
      let url = URL(string: referenceImage!)!
                    cell.nameLabel?.text = item.name
                    cell.yearLabel?.text = String(item.year)
                    cell.boxnumLabel?.text = String(item.boxnum)
                    cell.itemImage?.sd_setImage(with: url, placeholderImage: #imageLiteral(resourceName: "placeholder"))

                }
            }

            return cell
    }

答案 1 :(得分:0)

导入 FirebaseUI SDWebImage

using Ghostscript.NET.Rasterizer;
...

using (GhostscriptRasterizer raster = new GhostscriptRasterizer())
{
    raster.Open(filename);
    pages = raster.PageCount;

    _bitpages = new Bitmap[raster.PageCount];
    for (int i = 1; i < pages + 1; i++)
    {
        _bitpages[i - 1] = (Bitmap)raster.GetPage(dpi, dpi, i);
        // convert and save image here
    }
    raster.Close();
}

Firebase的 StorageReference 将通过以下方法工作:

  

UIImageView.sd_setImage(with:StorageReference,placeholderImage:   UIImage)

如下所示:

import FirebaseUI
import SDWebImage