解析 Swift 中的 PFFile 下载顺序 iOS
Parse PFFile download order iOS in Swift
我正在尝试从 Parse 中检索图像作为 PFFiles,但它们返回的顺序每次都不同。我找到了另一个 question/answer 来解决这个问题,但它在 Obj-C 中,一个小时后,我无法在 Swift.
中翻译一个有效的解决方案
这是原帖:
这是我的代码:
func retrieveItemImage() {
var query = PFQuery(className: "Items")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
let imageObjects = objects as! [PFObject]
for object in imageObjects {
let thumbnail = object["image1"] as! PFFile
thumbnail.getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let image = UIImage(data: imageData!) {
self.images.append(image)
self.theTableView.reloadData()
}
}
}
}
}
self.theTableView.reloadData()
}
}
我会这样做:
var images = [Int: UIImage]()
把它变成一个字典,然后你得到一个可选的下标结果,并且永远不会有数组超出范围的异常。
然后我会把你的部分代码重写为:
for (index, object) in enumerate(imageObjects) {
let thumbnail = object["image1"] as! PFFile
thumbnail.getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let image = UIImage(data: imageData!) {
self.images[index] = image
你永远不知道异步操作完成的顺序,但你的图像将按照指定的顺序,或者在字典中为 nil。您还应该更正您的 tableView 方法以检查它是否为零。另外,在我看来,每次加载图像后重新加载整个table是无效的。
我正在尝试从 Parse 中检索图像作为 PFFiles,但它们返回的顺序每次都不同。我找到了另一个 question/answer 来解决这个问题,但它在 Obj-C 中,一个小时后,我无法在 Swift.
中翻译一个有效的解决方案这是原帖:
这是我的代码:
func retrieveItemImage() {
var query = PFQuery(className: "Items")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
let imageObjects = objects as! [PFObject]
for object in imageObjects {
let thumbnail = object["image1"] as! PFFile
thumbnail.getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let image = UIImage(data: imageData!) {
self.images.append(image)
self.theTableView.reloadData()
}
}
}
}
}
self.theTableView.reloadData()
}
}
我会这样做:
var images = [Int: UIImage]()
把它变成一个字典,然后你得到一个可选的下标结果,并且永远不会有数组超出范围的异常。
然后我会把你的部分代码重写为:
for (index, object) in enumerate(imageObjects) {
let thumbnail = object["image1"] as! PFFile
thumbnail.getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let image = UIImage(data: imageData!) {
self.images[index] = image
你永远不知道异步操作完成的顺序,但你的图像将按照指定的顺序,或者在字典中为 nil。您还应该更正您的 tableView 方法以检查它是否为零。另外,在我看来,每次加载图像后重新加载整个table是无效的。