图像未按正确顺序附加
Images Don't Append In Right Order
我在加载视图时将所有图像附加到一个数组中。我通过循环遍历它来做到这一点...
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()
我在加载视图时将所有图像附加到一个数组中。我通过循环遍历它来做到这一点...
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()