ios - 使用 Parse 进行异步处理时遇到问题

标签 ios swift parse-platform

我有一个 Parse 数据库,其中包含缩略图的 PFFile 项目(以及其他项目)。该数据库是只读的,并且是使用另一个程序成功创建的。我确认所有缩略图都在 Parse 中。当我尝试使用下面显示的功能检索缩略图时,我在处理所有图像之前收到通知,导致根据通知后处理的时间偶尔失败。我如何确保所有记录都得到处理?

    func convertPFilesToImages () {
    println("convertPFilesToImages")
    let notification = NSNotification(name: "imagesLoaded", object: self)
    for i in 0 ..< records.count {
        let userImageFile = records[i].icon
        records[i].image = UIImage()
        println("name: \(self.records[i].name) image: \(self.records[i].image)")
        userImageFile.getDataInBackgroundWithBlock {
            (imageData: NSData?, error: NSError?) -> Void in
            if error == nil {
                //println("no error")
                if let imageData = imageData {
                    let image = UIImage(data:imageData)!

                    self.records[i].image = image
                    // println below shows that not all images are converted
                    println("name: \(self.records[i].name) image: \(self.records[i].image)")
                }
            } else {
                println("ParseProcessing-convertToImage: error = \(error)")
            }
            if (i == self.records.count-1) {
                println("All images processed")
                // loop is done before all images are processed
                NSNotificationCenter.defaultCenter().postNotification(notification)
            }

        }
    }

}

最佳答案

您的 for() 循环执行异步代码,您的问题出在 getDataInBackground 上。

i == self.records.count-1 时,它不能保证所有调用都已完成。

getDataInBackround 应该转换为 getData(或者 Parse 命名为 SYNCHRONOUS 调用),并且您的整个方法应该在后台线程中调用。

你也可以使用 NSOperationQueue同时加载所有内容,然后调用 [queue waitUntilFinished]

关于ios - 使用 Parse 进行异步处理时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828797/

相关文章:

ios - 在使用 libimobiledevice 之前退出 ios 应用程序

swift - '|'运算符(operator)为我提供不同类型的结果

swift - 扩展协议(protocol)以实现不同的行为

java - 异常: "No default Constructor provided" exception subclassing ParseObject

ios - 应用程序 ID 和 bundle ID 冲突

ios - 关于在现有 iOS 应用程序中集成 Firebase 的链接问题

iphone - 将 JSON 数组坐标映射到 map View 中

ios - Swift:init中super.init和self.attribute的顺序

Android 解析推送通知和新的 GCM 生成错误的设备 token 并解析推送通知不起作用

parse-platform - 如何在 Cloud Code 中跟踪指向用户的链接?