ios - 解析文件查询和 Swift 1.2 错误 - getDataInBackgroundWithBlock

标签 ios xcode swift parse-platform

我正在尝试从 Parse 查询图像,但我继续遇到 fatal error: unwrapping optional value unwrapping optional value.我不确定这是否与最近对 Swift 和 Xcode 的更新有关,所以可能是在 Parse 端,也可能是用户错误。

getDataInBackGroundWithBlock 唯一接受的是 NSData?NSError? 作为可选值。如果我尝试打开它们或使用其他类型,它将无法编译。

PFQuery 按预期返回数据。只有在 getDataInBackGroundWithBlock 调用中尝试从 PFFile 切换到 NSData 时才会出现问题。

框架已连接并正在运行。我已经测试了很多。

这是调用堆栈:enter image description here

我已经为此连续工作了 12 个多小时。我到处看了看,尝试了很多不同的东西。我不认识任何使用 Swift 或 Xcode 的人,你的帮助会很远。

以下是我尝试过但无济于事的其他主题,其中一个是我自己的:

Unresolvable error with Parse "Get Data In Background With Block"

Parse and Swift 1.2 issue

Parse getDataInBackgroundWithBlock not fetching in order

Swift Image retrieving from Parse sdk - getting crashed

还有解析文档:

https://www.parse.com/docs/ios_guide#files/iOS (他们的例子是我今天的起点)

var photoArray: Array<UIImage> = []


override func viewDidLoad() {
    super.viewDidLoad()

    callPFObjectQuery()

    let testObject = PFObject(className: "QuestionMaster") //testobject
    testObject["foo"] = "bar" //testobject
    testObject.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
        println("Object has been saved.")

    }
} 

func callPFObjectQuery() {

    var finalObjects: [PFObject] = []
    var nsdataObjects: NSData?

    var query: PFQuery = PFQuery(className: "QuestionMaster")
    query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in

        for object in objects! {

            let imageFiles = object["questionImage"] as! PFFile!

//error line     imageFiles.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in

                    if error == nil {

                        dispatch_async(dispatch_get_main_queue()) {

                            let image = UIImage(data: imageData!)
                            self.photoArray.append(image!)
                            println(self.photoArray[0])

                        }

                    }

                }
            }

        }
    }

更新,2015 年 11 月 12 日 - Swift 1.2:自从我发布这篇文章以来已经有好几个月了,因为它有超过 1k 的浏览量和一个没有投票的答案,我觉得最好回去检查一下,确保我选择的确实是正确的。我还没有通过并再次测试它,但是我对 Parse SDK 和 Swift 变得非常非常熟悉(6-8k 行),我对我提供的答案感到满意。 Uttam Sinha 非常接近,但在 getDataInBackgroundWithBlock 中的完成处理程序上展开而不是可选将不起作用。它们必须是可选项,然后在 block 中展开。 Ingouackaz 完全错过了 for 循环,但他的 getDataInBackgroundWithBlock 调用是正确的。

我的第一次尝试充其量是草率的,我可能很沮丧。对于刚刚开始的用户,数据查询之前的查询将以 PFObject 数组完成。因此,您需要遍历该数组,对每个项目调用 getDataInBackgroundWithBlock

我可能会使用 object.valueForKey("questionImage") 而不是 object["questionImage"] 只是为了让它更明确。我还将 key 字符串 "questionImage" 作为常量存储在 key 文件中,因此无需担心拼写错误。

我不确定 PDF 文件和 Parse。自从那种情况以来我没有尝试过。但现在我很好奇,因为如果可能的话,这会再次让我的工作更轻松。一旦我再试一次,我会更新。

最佳答案

这应该适用于 Swift 1.2

file.getDataInBackgroundWithBlock({
                (imageData: NSData?, error: NSError?) -> Void in
                if (error == nil) {
                    let image = UIImage(data:imageData!)
                    println(image)
                }

            })

关于ios - 解析文件查询和 Swift 1.2 错误 - getDataInBackgroundWithBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600588/

相关文章:

ios - 如何从 Date() 中提取今天、昨天并使其像工作日和月份一样本地化?

iphone - 为 iPhone 5 分辨率调整布局

ios - 游戏套件延迟

objective-c - 将短 Zulu 格式日期转换为 NSDate

xcode - 狮子 10.7.3 : Apple is not currently accepting applications built with this version of the OS

iphone - 如何在表格单元格上添加可点击按钮?

objective-c - 如何提高从 url 加载图像的性能

ios - 分段控制 - 发送到实例的无法识别的选择器

ios - 是否可以在 Swift 中自动注入(inject)异常处理代码?

ios - 如何在 Swift 4 中将 2 个 boolean 组合在一起