我正在构建应用程序,我需要使用一些用户信息填充TableView,例如用户名和个人资料图片。以下代码适用于下载和显示图像。
if let imageFile = usersArr[indexPath.row]["profileImage"] as? PFFile {
let data = try? imageFile.getData()
cell?.imageView?.image = UIImage(data: data!)
}
但这是同步的,我希望它是异步的。所以我尝试了这个。
if let imageFile = usersArr[indexPath.row]["profileImage"] as? PFFile {
imageFile.getDataInBackgroundWithBlock({ (data, error) -> Void in
if let imageData = data where error == nil {
cell?.imageView!.image = UIImage(data: imageData)
} else {
cell?.imageView!.image = UIImage(named: "defaultProfile")
}
})
}
但它不起作用,我无法弄清楚原因。甚至没有出现defaultProfile图像。
任何提示?
答案 0 :(得分:0)
问题是,一旦获取数据并设置了图像,视图就不会刷新。
我建议使用PFImageView
框架中的ParseUI
。它是一个Parse-made图像视图,它将在加载时自动处理显示占位符,一旦可用就更新数据,并在下载完成后刷新视图。这是一个示例用法。
let imageView = PFImageView()
// Set placeholder image
imageView.image = UIImage(named: "placeholder")
// Set remote image
imageView.file = profilePicture
// Once the download completes, the remote image will be displayed
imageView.loadInBackground { (image: UIImage?, error: NSError?) -> Void in
if (error != nil) {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
} else {
println("image loaded")
}
}