我已经在我的iOS应用中子类化了PFUser,并且我正在使用这个函数来获取头像。profilePicture是@NSManaged PFFile,profilePictureImage是UIImage。
除了getData()和fetchIfNeeded()是在主线程上潜在的长时间运行的操作之外,它工作得很好。
有没有人能想出一个好方法来实现这个方法,让可怕的部分在后台线程上运行?
谢谢!
func image() -> UIImage!
{
if !(self.profilePictureImage != nil)
{
if self.profilePicture != nil
{
self.fetchIfNeeded()
if let data = self.profilePicture!.getData() {
self.profilePictureImage = UIImage(data: data)
return self.profilePictureImage
}
}else {
return UIImage(named: "no_photo")!
}
}
return self.profilePictureImage
}发布于 2015-06-24 03:38:20
更改该方法,使其不是返回图像,而是接受当图像可用时调用的闭包,并将其作为参数传递。如果需要下载映像,则可以立即调用,也可以在延迟后调用。
发布于 2015-07-21 01:02:58
只需按您所说的操作,在后台使用:fetchIfNeededInBackgroundWithBlock运行任务。此外,您的image函数应该如下所示:
func imageInBackgroundWithBlock(block: ((UIImage?, NSError?) -> Void)?) {
var image: UIImage?
self.fetchIfNeededInBackgroundWithBlock({ (user, error) -> Void in
if error == nil {
// load the picture here
image = ...
} else {
println(error!.userInfo)
image = UIImage(named: "no_photo")!
}
// return after fetching the user and the image
block?(image, error)
})
}https://stackoverflow.com/questions/31011095
复制相似问题