我有一个如下所示的功能
func getRecipeArray(name:String) -> [String] {
var query = PFQuery(className: name)
query.selectKeys(["Recipe_Name"])
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
NSLog("Successfully retrieved \(objects.count) scores.")
for object in objects {
var name: String = object.objectForKey("Recipe_Name")! as String
self.dummyArray.append(name)
}
} else {
NSLog("Error: %@ %@", error, error.userInfo!)
}
}
println(self.dummyArray.count)
println(self.dummyArray)
return self.dummyArray
}
从解析中检索Recipe_name后,它应该返回数组。 但它只返回一个值,然后执行findObjectsInBackgroundWithBlock函数。
在控制台中,它打印如下所示的值
1 [] 2015-01-08 16:15:27.922 IndianFood [2268:67055] 成功检索了2个分数。
请帮我解决此问题。
答案 0 :(得分:1)
query.findObjectsInBackgroundWithBlock
是一个在后台线程中执行的异步方法。只有在后台线程完成下载并查找数据后才会分配self.dummyArray
。但是您的函数将在块完成执行之前返回。
您需要做的是,在query.findObjectsInBackgroundWithBlock
块中执行您想要的任何操作,以便它只在后台线程完成其操作后执行。请注意,任何需要UI更新的操作都必须在主线程中完成。虚拟代码如下。
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
otherfunctions()
dispatch_async(dispatch_get_main_queue(),
{
// UI updates like
// label.text = object["name"]
})
}
}