我正在尝试从 Parse 查询图像,但我继续遇到 fatal error: unwrapping optional value unwrapping optional value
.我不确定这是否与最近对 Swift 和 Xcode 的更新有关,所以可能是在 Parse 端,也可能是用户错误。
getDataInBackGroundWithBlock
唯一接受的是 NSData?
和 NSError?
作为可选值。如果我尝试打开它们或使用其他类型,它将无法编译。
PFQuery
按预期返回数据。只有在 getDataInBackGroundWithBlock
调用中尝试从 PFFile
切换到 NSData
时才会出现问题。
框架已连接并正在运行。我已经测试了很多。
这是调用堆栈:
我已经为此连续工作了 12 个多小时。我到处看了看,尝试了很多不同的东西。我不认识任何使用 Swift 或 Xcode 的人,你的帮助会很远。
以下是我尝试过但无济于事的其他主题,其中一个是我自己的:
Unresolvable error with Parse "Get Data In Background With Block"
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/