getDataInBackgroundWithBlock中的progressBlock未被调用

时间:2014-09-30 05:45:00

标签: ios swift parse-platform

我的Swift应用程序使用Parse.com作为后端。除此之外,我存储用户配置文件的图像。我存储了同一图像的两个版本:一个缩略图和一个全尺寸图像。当用户点击缩略图时,它会被放大。然后,应用程序加载完整大小的版本,并在加载完成后将其显示在放大的缩略图之上。由于缩略图在加载完整尺寸时看起来很模糊,我已经实现了一个圆形进度条,显示加载进度,给出了正在进行的视觉反馈。

这是处理此过程的方法(progressCircleCAShapeLayer):

func fetchFullImage() {
    photoObject.fetchIfNeededInBackgroundWithBlock { (fetchedObject: PFObject!, error: NSError!) -> Void in
        if error == nil {
            // After fetching object, now we get the full sized image
            let userFullImageFile = fetchedObject["fullImage"] as PFFile

            userFullImageFile.getDataInBackgroundWithBlock( {
                (imageData: NSData!, error: NSError!) -> Void in
                if error == nil {
                    println(">> Success! Full image retrieved.")
                    self.fullImageView.image = UIImage(data: imageData)

                    // Hide the progress indicator
                    self.progressCircle.hidden = true 

                    // Fade in and show the image
                    self.showFullImage()
                }
            },
            progressBlock: {(percentDone: CInt) -> Void in
                println("Loading... \(percentDone)")
                // Prints out progress percentage under wifi, but not under 3G!

                self.progressCircle.strokeEnd = CGFloat(percentDone) / 100.0
            })

        } else {
            println(error)
        }
    }
}

现在这是有趣的部分。当我在通过wifi连接的真实设备上运行应用程序时,一切都按预期进行:进度循环随着图像加载等而增长等等。现在当我关闭wifi并且同一设备通过3G连接时,进度循环不会增长。本质上,发生的是progressBlock闭包没有被调用(我可以看到这个,因为println语句没有产生结果)。一段时间后图像加载(完成闭包调用),并且显示正确,但我无法显示进度。

我试图找到这背后的逻辑。我几乎可以理解它是否相反(图像加载速度如此之快以至于无法看到进度),但是在3G图像上加载需要几秒钟,在此期间似乎没有任何事情发生。

有没有人知道什么可以让progressBlock在这里被调用?我希望能够提供"正在加载"视觉反馈。

提前致谢!

0 个答案:

没有答案