我无法从此函数获得 [UIImage?] 返回。这getDataInBackgroundWithBlock
不允许我设置除Void in
。然而,该块确实增加了iconArray
当它迭代时。但是一旦超出该块,数组又会变空。您将在下面的代码中看到数组正确打印和不正确打印的注释。
该调用确实连接到数据库,所有数据都在流动。它只是返回挂起的数组。
class callData {
func queryImages() -> [UIImage?] {
var iconArray: [UIImage?] = []
var query: PFQuery = PFQuery(className: "QuestionMaster")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
for object in objects! {
let imageFiles = object["questionImage"] as! PFFile
imageFiles.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if (error == nil) {
let image = [UIImage(data: imageData!)]
iconArray += image //adds item to array correctly
}
println(iconArray) //prints correct array here
}) //getDataInBackgroundWithBlock close
println(iconArray) //does not print correct array here
} //for-loop close
}
return iconArray //returns empty array
}
}
正如您的函数所述,该块是在后台执行的(在异步线程上)。
这意味着它将在后台加载,但也会继续函数的其余部分,从而返回一个空数组。
要解决此问题,您应该在后台为您的块使用完成处理程序。
func queryImages(onComplete:(images: [UIImage?])-> Void){
var iconArray: [UIImage?] = []
var query: PFQuery = PFQuery(className: "QuestionMaster")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
for object in objects! {
let imageFiles = object["questionImage"] as! PFFile
let imageData = imageFiles.getData()
let image = UIImage(data:imageData!)
iconArray.append(image)
println(iconArray)
}
onComplete(images: iconArray)
}
}
虽然上面的代码未经测试应该可以工作
for 循环内的异步数据检索已被替换为同步调用,以简化项目
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)