在Swift

时间:2015-08-09 08:03:59

标签: swift parse-platform pffile

我正在尝试从Parse中检索图像作为PFFiles,但它们返回的顺序每次都会改变。我发现另一个问题/答案解决了这个问题,但是它在Obj-C中,一小时后,我无法在Swift中翻译一个有效的解决方案。

这是原始主题:

Parse PFFile download order iOS

这是我的代码:

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()
        }

}

1 个答案:

答案 0 :(得分:1)

我会这样做:

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方法以检查它是否为零。另外,在我看来,在每次图像加载后重新加载整个表是无效的。