与Parse异步显示图像时出错

时间:2015-11-24 15:07:26

标签: ios swift asynchronous parse-platform

我正在构建应用程序,我需要使用一些用户信息填充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图像。

任何提示?

1 个答案:

答案 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")
    }
}