ios - 图像未按正确顺序附加

标签 ios swift parse-platform uiimage nsarray

我在加载 View 时将所有图像附加到一个数组中。我通过循环遍历它来做到这一点......

func refresh() {
    print("View appeared")

    self.posts.removeAll(keepCapacity: false)

    let postQuery = PFQuery(className: "Post")

    postQuery.whereKey("type", equalTo: "world")

    postQuery.orderByDescending("createdAt")

    postQuery.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
        if let objects = objects as? [PFObject] {
            self.posts = objects
            if error == nil {
                if self.posts.isEmpty == false {
                    for post in self.posts {
                        post["image"]?.getDataInBackgroundWithBlock({ (data, error) -> Void in
                            if let image = UIImage(data: data!) {
                                self.images.append(image)
                                if self.posts.count == self.images.count {
                                    self.table.reloadData()
                                }

                            }

                        })
                    }


                }

            }

        }

    })

}

问题在于它没有以正确的顺序附加图像。我很确定这是因为获取图像数据并转换为 UIImage 需要一点时间,而在那个时候它只是进入下一个。我不确定这是否是真正发生的事情。但是我能做些什么来解决这个问题呢?

最佳答案

这种情况会发生,因为您在自己的后台线程中获取每个图像,并且每个图像所花费的时间可能会有所不同。因此无法保证线程完成的顺序。此外,使用此方法您将执行大量 Parse 请求。

从解析中检索帖子时,请在执行查询之前包含以下内容:

query.includeKey("image")

然后(只是一个简单的例子,不是真正的校对...):

for post in self.posts {
    if let image = UIImage(post["image"]) {
        self.images.append(image)
    }
}
self.table.reloadData()

关于ios - 图像未按正确顺序附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33793910/

相关文章:

javascript - 从 Parse 将媒体上传到 AWS

java - 我的代码没有使用 Parse Query 从 parse.com 提取信息

iOS 5/6 与 iOS 7 多行标签行间距

ios - 使用 AlertController 强制更新应用程序

ios - Swift - 将毫秒转换为日期

ios - 为什么我在 Controller 代码之前执行 View 代码?

ios - Parse.com 查询 TableView 中的所有用户

ios - 将 float 四舍五入到最接近的 .5

ios - 如何在没有底层 UIScrollView 的情况下在 UINavigationItem 上显示 UISearchController?

ios - 使用 AFNetworking 在服务器上保存图像不起作用