Не удается получить изображение из Firebase в TableViewCell - PullRequest
0 голосов
/ 21 марта 2020

Я только начал изучать Firebase неделю go, но сейчас я сталкиваюсь с проблемой невозможности загрузки изображения из Firebase в мой TableViewCell. Я могу получить данные, такие как текстовая информация и URL-адрес изображения, из базы данных Firebase Realtime, но не могу использовать эти URL-адреса для запуска изображения в TableViewCell. Можете ли вы все помочь мне определить проблемы? Я могу получить все, например текстовую информацию, а также URL-адрес изображения, но как сделать так, чтобы изображение появлялось в ячейке? Буду очень признателен за вашу помощь!

Это ViewController, который отвечает за отображение TableViewCell

import UIKit
import Firebase
import FirebaseStorage


class NewsFeedViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var rubthort:String = ""
    var linkRub:String?

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrItem.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "mycell", for: indexPath) as! NewsFeed
        // textlabel
        // detailtextlabel
        cell.textLabel?.text = arrItem[indexPath.row].name
        cell.detailTextLabel?.text = arrItem[indexPath.row].price
        //cell.imageView?.image = UIImage(named: "flower")
        // Get image
        let id = RetrieveData()

        if let imageLink = self.linkRub {
            let url = URL(string: imageLink)
            //let data = NSData(contentsOf: url!)
            URLSession.shared.dataTask(with: url!) { (data, response, error) in
                    // download hit an error so return out
                    if error != nil {
                        print(error)
                        return
                    }
                DispatchQueue.main.async {
                    cell.imageView?.image = UIImage(data: data!)

                }

            }.resume()
        }

        return cell

    }

    let ref = Database.database().reference()
    // Array of PlasticItem
    var arrItem = [RetrieveData]()

    @IBOutlet weak var tblView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        retrieveData()

    } // Ends of viewDidLoad

    func retrieveData() {
        // Getting a node from database
        let retRef = ref.child("item/electronic")
        // Observing data changes
        retRef.observe(DataEventType.value) { (dataSnapshot) in
            // Remove array item everytime there is a new reference to the data in Firebase
            self.arrItem.removeAll()
            // Check if there are any children or second object inside the parent object
            if dataSnapshot.childrenCount > 0 {
              // Loop over all children's object
              for post in dataSnapshot.children.allObjects as! [DataSnapshot] {
                    let object = post.value as! [String: Any]
                    let getName = object["name"] as! String
                    let getPrice = object["price"] as! String
                    let getImage = object["itemURL"] as! String
                    print(getName)
                    print(getPrice)
                    print(getImage)
                self.linkRub = getImage
                self.arrItem.append(RetrieveData(cat: "", name: getName, price: getPrice, rub: getImage))

                }
               self.tblView.reloadData()
            }// Ends of if statement
            else if dataSnapshot.childrenCount == 0{
                print("No Data Found")
            }
        } // Ends of retRef.observe
    } // Ends of retrieveData()
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */
}

Это структура модели

import Foundation
import UIKit

struct RetrieveData{
    var cat: String
    var name: String
    var price: String
    var rub: String?

    init(){
        self.cat = ""
        self.name = ""
        self.price = ""
        self.rub = ""

    }
    init(cat:String, name:String, price:String, rub: String){
        self.cat = cat
        self.name = name
        self.price = price
        self.rub = rub
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...