将图像从firebase图像URL设置为Swift中的单元格

时间:2018-02-02 01:28:37

标签: ios swift firebase sdwebimage

如果ImageView位于同一个View Controller中,我能够正常工作。但是我创建了一个自定义单元格.xib和一个模型类。所有数据(文本)似乎都在传输,甚至是Firebase数据库图像的URL,但图像没有变化,默认占位符图像正在显示。如果我没有设置默认的占位符图像,我会收到一个错误,说它是零。再次,所有单元格都填充来自Firebase的文本数据,唯一的不是来自的图像来自给定的URL。调试显示URL确实被传递到" profileImageURL"变量。以下是一些代码:

class Profile{

var name: String = ""
var age: String = ""
var profileImg : UIImageView! = UIImageView.init(image: "main"))
var description : String = ""


 }

这是表视图控制器代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCellTableViewCell", for: indexPath) as! CustomCellTableViewCell

    let profile = profileArray[indexPath.row]
    // Configure the cell...
    profileTableView.rowHeight = 300
    cell.nameLbl.text = profile.name
    cell.descriptionLbl.text = profile.description
    cell.profileImage.image = UIImage(named: "main")

    return cell
}

func retrievePosts(){


    let dataRef = Database.database().reference()

    let postsDB = dataRef.child("Messages")

    postsDB.observe(.childAdded) { (snapshot) in
    let value = snapshot.value as! Dictionary<String,String>

    let text = value["postText"]!
    let profileImgURL = value["postImage"]!
    let userID = value["sender"]!

    let url = NSURL(string:"\(profileImgURL)")

    let profile = Profile()
    profile.description = text
    profile.name = name as! String
    profile.profileImg.sd_setImage(with: URL(string:profileImgURL), placeholderImage: nil)  


    self.profileTableView.reloadData()
    self.profileArray.insert(profile, at: 0)

        })

}

here is the firebase data structure:
        - Messages
          -L4IkuSxWDnsiJvTKoo0
              -postImage: "https://firebasestorage.googleapis.co......"
              -postText: "Lorem ipsum dolor sit er elit lamet, consecteta..."
              -sender: "C19ghii6OVPNnzJNYPvVJeKuoi73"

2 个答案:

答案 0 :(得分:0)

兄弟,任何单元格的图像都是在cellForRowAt方法中设置的。您正在获取原始数据,因为您是从配置文件而不是硬编码中获取原始数据,而对于图像,您将图像设置为&#34; main&#34;每一次。希望这可以帮助。 - Ashish Sharma

烨!谢谢! App dev新手。就是这样。必须在Profile中创建一个新变量来保存url然后在cellForRowAt中设置带有该变量URL的Imageview。有可能更简单的方法,但为我工作!非常感谢! - 吉列尔莫·格列柯

答案 1 :(得分:-1)

它不是真正的解决方案,而是另一种选择:

使用翠鸟吊舱设置网址图片。

let url = URL(string: "https://example.com/image.jpg")!
imageView.kf.setImage(with: url)

https://github.com/onevcat/Kingfisher