无法使用firebase

时间:2018-03-21 01:03:39

标签: swift firebase

我无法在表格视图单元格中使用firebase显示图像,我不知道为什么因为我的代码似乎有用,但不存在,可能有人帮助我吗?

注意:标签Works。我使用cocoa触摸类创建了一个自定义单元格,然后我使用符号将其链接到单元格,如您所见。

import UIKit
import Firebase



class PlacesTableViewController: UIViewController, 
UITableViewDataSource, UITableViewDelegate{
let ref = Database.database().reference()
var PlacesRef:DatabaseReference! = nil
var SelectedRef:DatabaseReference! = nil
let storage = Storage.storage()
var postdata:[String] = [String]()



@IBOutlet weak var tableview: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()


    print("Here Variables")
    print("Here translated Names")
    PlacesRef = ref.child("Places")
    let storageRef = self.storage.reference()
    PlacesRef.observe(.value) { (snapshot) in
        let postDict = snapshot.value as? [String : AnyObject] ?? [:]
        if snapshot.exists() {
            for a in ((snapshot.value as AnyObject).allKeys)!{
                var now:String = ""
                self.postdata.append(a as! String)

                DispatchQueue.main.async{
                    self.tableview.reloadData()
                }
            }
        } else {
            print("we don't have that, add it to the DB now")
        }

        print(self.postdata) //add key to array
    }
    tableview.delegate = self
    tableview.dataSource = self
}




func tableView(_ _tableView: UITableView, numberOfRowsInSection selection: Int) ->Int{
    print(postdata)

    return postdata.count
}


func tableView( _ tableview: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
   let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
    var image=UIImage()
    let StorageRef = storage.reference()
    let NationRef = StorageRef.child("Nations/\(postdata[indexPath.row]).jpg")
    print("\(postdata[indexPath.row]).jpg")
    NationRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
        if let error = error {
            print(error)
        } else {
            // Data for "images/island.jpg" is returned
            image = UIImage(data: data!)!
            print("image downloaded!")
        }
    }



    cell.DetailLabel.text = postdata[indexPath.row]
    cell.DetailImage.image = image
    return cell
}


}

1 个答案:

答案 0 :(得分:0)

让我们看看

中会发生什么
func tableView( _ tableview: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
   let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
    var image=UIImage()
    let StorageRef = storage.reference()
    let NationRef = StorageRef.child("Nations/\(postdata[indexPath.row]).jpg")

// HERE we starting async web request for image data   (tag 1)      

    NationRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
        if let error = error {
            print(error)
        } else {
            // HERE we getting image data from async request and storing it in image var (tag 3) 
            image = UIImage(data: data!)!
            print("image downloaded!")
        }
    }

    cell.DetailLabel.text = postdata[indexPath.row]

    // HERE we setting UIImage to cell's imageView  (tag 2)  
    cell.DetailImage.image = image
    return cell
}

如果打印标签,我们将获得标签1,标签2和标签3.这意味着首先创建空的uiimage,然后将此图像设置为单元格的imageView,最后根据请求将图像更改为图像(图像,而不是单元格的ImageView的)

我认为答案可以是 - 用 cell.DetailImage.image = UIImage(数据:数据!) <替换 image = UIImage(data:data!)! / p>

并且有很多方法可以改进这种方法