我试图从Parse查询图像,然后继续运行fatal error: unexpectedly found nil while unwrapping optional value
。我不确定这是否与最近对Swift和Xcode的更新有关,所以可能是在解析端,或者肯定是用户错误。getDataInBackGroundWithBlock
将接受的唯一选项是NSData?
和NSError?
。如果我尝试解开它们或使用其他类型,它将不会编译。PFQuery
按预期返回数据。只有当试图在PFFile
调用中从NSData
切换到getDataInBackGroundWithBlock
时,才会出现问题。
框架已连接并运行。我已经测试过很多次了。
下面是调用堆栈:
我已经连续工作了12个多小时了。我到处找过,也试过很多不同的东西。我不认识和斯威夫特或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日-斯威夫特1.2:我已经发布了好几个月了,因为它有超过1k的浏览量和一个没有任何支持的答案,我觉得最好还是回去看看,确保我选择的确实是正确的。我还没有经历和再次测试,但已经变得非常,非常熟悉(6-8k行)的Parse SDK和Swift我对我提供的答案感到满意。Uttam Sinha非常接近,但是在
getDataInBackgroundWithBlock
中展开而不是选择完成处理程序将不起作用。它们必须是可选的,然后在块中展开。Ingouackaz完全错过了for循环,但他的getDataInBackgroundWithBlock
调用是正确的。我的第一次尝试充其量是草率的,我可能是受挫了。对于刚刚开始的用户,在数据查询之前的查询将使用一个
PFObject
数组完成。因此,您需要遍历该数组,对每个项调用getDataInBackgroundWithBlock
。而不是
object["questionImage"]
我可能会使用object.valueForKey("questionImage")
只是为了使它更明确。我还将键字符串"questionImage"
作为常量存储在键文件中,这样就不必担心输入错误。我不确定PDF文件和解析。从那以后我就没试过。但现在我很好奇,因为如果可能的话,这会再一次让我的工作更轻松。我会更新一次,我再试一次。
最佳答案
这应该适用于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/