我正在尝试查询我的_User
类中的特定objectId,并从中下载图像。
如果根据parse.com用户表进行检查,则传递objectId
的{{1}}是正确的。{/ p>
返回的数组总是空的
任何帮助都将不胜感激。
userList
答案 0 :(得分:1)
您还不了解完成处理程序的工作原理。 findObjectsInBackgroundWithBlock
设计立即返回。它将查找任务排入后台线程。任务完成后,可能会在同一个后台线程上调用完成处理程序代码。
所以你调试不正确,希望调试器在完成处理程序中点击断点,同时单步执行创建后台任务的主线程。它不会那样工作。
由于您对调试感到困惑,因此在每个阶段都会提供有用的println(),例如:
if error != nil{// This never prints anything to console
println(error)
}
else {
println("No error!")
}
if let results = results as? [PFObject] {
println("Got \(results.count\) results!")
for object in results {
println("Got result: \(object)!")
let userPicture = object["image"] as! PFFile
userPicture.getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
println("Got user picture!")
if let imageData = imageData {
let image = UIImage(data:imageData)
arrayToReturn.append(image!)
}
}
else {
println("could not get user picture!")
}
}
}
}
else {
println("What the hell? Results was not a [PFObject]")
}
NOW 关于正确设计回调:
您的主要功能为数据创建请求,然后立即返回。它应该返回 Void ,而不是数组。
什么应该反映新数据?让我们说它是一个名为myTableView的UITableView。然后,当数组填入后,将其保存在类的存储属性中,并在myTableView.reloadData()
调用主线程中调用dispatch_async
。 UITableViewDataSource
函数使用上述存储的数组属性。
我确定这令人困惑。您需要阅读有关集成后台数据的整个教程。
有趣的是,我只是为其他用户做了这个!
Tutorial in retrieving, mutating and saving array from Parse.com in Swift with UITableView