查询从Parse到UIImage数组的照片 - Swift 2.0

时间:2015-09-28 19:47:31

标签: ios swift parse-platform uiimage swift2

我正在使用下面的'数组超出范围'错误。代码似乎没有执行内部块。它说我的数组中没有任何东西,但是我的print(objects.count)= 7.我的Parse表名是“Photos”,它在名为“imageFile”的列中有7个PFFiles - 我的getDataInBackgroundWithBlock一定有问题吗?我正在使用swift2和xcode 7谢谢!

  var pageImages: [UIImage] = []

    func xyz() {

    let query = PFQuery(className:"Photos")

    query.whereKey("userId", equalTo: (PFUser.currentUser()!.objectId)!)

    query.findObjectsInBackgroundWithBlock({
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {

            for object in objects! {

                let userPicture = object["imageFile"] as! PFFile

                userPicture.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in
                        if (error == nil) {
                            let image = UIImage(data:imageData!)
                            self.pageImages.append(image!)

                            print("pageImages.count \(self.pageImages.count)")

                        }
                    }
            }
            print("objects.count \(objects!.count)")
            print("pageImagesOutside.count \(self.pageImages.count)")    

        }
        self.loadPage()
    }) }

  self.imageView1.image = pageImages[1]
    self.imageView2.image = pageImages[2]
    self.imageView3.image = pageImages[3]
    self.imageView4.image = pageImages[4]
    self.imageView5.image = pageImages[5]
    self.imageView6.image = pageImages[6]
    self.imageView7.image = pageImages[7]

2 个答案:

答案 0 :(得分:0)

第一项或数组的第一个索引是0,而不是1!

所以你的数组索引应该是0-6,而不是1-7!

所以:

self.imageView1.image = pageImages[0]
self.imageView2.image = pageImages[1]
self.imageView3.image = pageImages[2]

祝你有个美好的一天:)

答案 1 :(得分:0)

尝试更新Swift 2更改的语法。 The iOS guide has been updated

更新查询

query.findObjectsInBackgroundWithBlock({
    (objects: [AnyObject]?, error: NSError?) -> Void in
    ...
}

以下

query.findObjectsInBackgroundWithBlock {
    (objects: [PFObject]?, error: NSError?) -> Void in
    ...
}

正如cnvinette所提到的,你应该避免直接引用数组索引,这就是直接导致问题的原因。由于语法更改,数组未正确填充,导致稍后出现数组越界错误。绝对要考虑重构,这样你的代码就不会脆弱了。