Получить изображение из хранилища Firebase в Swift TableView

Я изо всех сил пытаюсь получить изображение из хранилища Firebase в свой файл TableView. Цените любую помощь. Ниже мой код:

код tableviewcell:

class HomeFeedCell : UITableViewCell {

    Var feeds = [HomeFeed]()
    var dbRef :FIRDatabaseReference!
    var storage : FIRStorage!


    @IBOutlet weak var Name: UILabel!
    @IBOutlet weak var Location: UILabel!
    @IBOutlet weak var Type: UILabel!

    @IBOutlet weak var FeedImage: UIImageView!

    func configureCellWith(product : HomeFeed)
    {
       Name.text? = product.name
        Location.text? = product.location
        Type.text? = product.type

       func setSelected(selected: Bool, animated: Bool) {
          super.setSelected(selected, animated: animated)
       }

        // Configure the view for the selected state
    }

}

Моя таблица:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! HomeFeedCell

    let details = feeds[indexPath.row]

    cell.configureCellWith(details)

    return cell
}

Я могу успешно отобразить имя, местоположение и информацию о типе, но я просто застрял на получении изображения. Ниже мой файл структуры:

struct HomeFeed {

    let key:String!
    let name:String!
    let location:String!
    let review:String!
    let type:String!
    let photoURL:String

person krisshan Babu    schedule 06.09.2016    source источник


Ответы (2)


Вполне вероятно, что вы захотите сделать что-то вроде этого:

Загрузите в ячейку табличного представления (на основе имени, переданного в ячейку, или какого-либо другого уникального идентификатора):

  // Create a storage reference from the URL
  let storageRef = storage.reference("name/of/my/object/to/download.jpg")
  // Download the data, assuming a max size of 1MB (you can change this as necessary)
  storageRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
    // Create a UIImage, add it to the array
    let pic = UIImage(data: data)
    FeedImage.image = pic
  })

Дополнительную информацию см. в разделе От нуля до приложения: разработка с помощью Firebase, и это связанный исходный код для практического примера того, как это сделать.

person Mike McDonald    schedule 06.09.2016

Есть два способа получить изображение из URL-адреса: асинхронно и синхронно, оба я объяснил ниже с использованием

Синхронно:

if let filePath = Bundle.main.pathForResource("imageName", ofType: "jpg"), image = UIImage(contentsOfFile: filePath) 
{
  imageView.contentMode = .scaleAspectFit
  imageView.image = image
}

Асинхронно:

Создайте метод с обработчиком завершения для получения данных изображения из вашего URL

func getDataFromUrl(url: URL, completion: ((data: Data?, response: URLResponse?, error: NSError? ) -> Void)) {
URLSession.shared.dataTask(with: url) {
    (data, response, error) in
    completion(data: data, response: response, error: error)
 }.resume()
}

Создайте метод загрузки изображения (запустите задачу)

func downloadImage(url: URL){
print("Download Started")
getDataFromUrl(url: url) { (data, response, error)  in
    guard let data = data where error == nil else { return }
    DispatchQueue.main.async() { () -> Void in
        print(response?.suggestedFilename ?? url.lastPathComponent ?? "")
        print("Download Finished")
        self.imageView.image = UIImage(data: data)
    }
 }
}

Использование:

override func viewDidLoad() {
super.viewDidLoad()
print("Begin of code")
if let checkedUrl = URL(string: "http://www.apple.com/euro/ios/ios8/a/generic/images/og.png") {
    imageView.contentMode = .scaleAspectFit
    downloadImage(url: checkedUrl)
}
print("End of code. The image will continue downloading in the background and it will be loaded when finished.")
}

Надеюсь, что это поможет вам!

person Satish Mavani    schedule 06.09.2016