【问题标题】:Query for Photos from Parse into UIImage array - Swift 2.0从 Parse 中查询照片到 UIImage 数组 - Swift 2.0
【发布时间】:2015-09-28 19:47:31
【问题描述】:

下面出现“数组超出范围”错误。代码似乎没有执行内部块。它说我的数组中没有任何内容,但我的 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]

【问题讨论】:

    标签: ios swift parse-platform uiimage swift2


    【解决方案1】:

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

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

    所以:

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

    祝你有美好的一天:)

    【讨论】:

    • cvinette,我希望它是那么简单。不幸的是,该数组甚至没有填满 UIImages。当我单步执行代码时,它会转到 getDataInBackgroundWithBlock 并跳转到块的末尾,块内的任何内容都不会被执行。
    【解决方案2】:

    尝试更新 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 所提到的,您应该避免直接引用数组索引,这就是直接导致问题的原因。由于语法更改,未正确填充数组,导致稍后出现数组越界错误。一定要考虑重构,这样你的代码就不会脆弱了。

    【讨论】:

    • 当我将参数更改为 PFObject 时,我收到以下错误:无法将类型 '([PFObject]?, NSError?) -> Void' 的值转换为预期的参数类型 'PFArrayResultBlock?'
    • 仔细检查括号和花括号是否也正确更新。如果它仍然抛出错误,您应该继续使用 Parse 提交错误报告。这正是他们在 swift 2 文档中展示的方式,所以如果有错误,他们需要了解它。
    • 感谢 Russell,我怀疑 iOS9 ATS 安全性可能会阻止 imageData 检索,尽管关闭 ATS 似乎没有帮助。我会将这个问题提交给 Parse。
    • 我收到以下 ATS 错误:“应用程序传输安全已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用程序的 Info.plist 配置临时异常文件。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多