图像未按正确的顺序追加



加载视图时,我会将所有图像附加到一个数组中。我是这样循环的…

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需要一点时间,在这段时间内,它只会进入下一个UIImage。我不确定这是不是真的发生了什么。但是我能做些什么来解决这个问题呢?

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

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

query.includeKey("image")

然后(只是一个快速的例子,不是真正的校对…):

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

最新更新