0

我在我的 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
}
4

2 回答 2

0

更改方法,以便在图像可用时调用闭包并将其作为参数传递,而不是返回图像。如果需要下载图像,可以立即调用,也可以延迟一段时间后调用。

于 2015-06-23T19:38:19.720 回答
0

照你说的做,在后台运行任务: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)
    })

}
于 2015-07-20T17:02:58.273 回答