在函数完全执行之前返回值
Returning the value before the function executed fully
我有一个功能如下图
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 后应该 return 数组。
但它 return 之前只是一个值,然后执行 findObjectsInBackgroundWithBlock 函数。
在控制台中它打印如下所示的值
1
[]
2015-01-08 16:15:27.922 IndianFood[2268:67055]
成功检索到 2 个分数。
请帮我解决这个问题。
query.findObjectsInBackgroundWithBlock
是一个在后台线程中执行的异步方法。 self.dummyArray
只有在后台线程完成下载并找到数据后才会被赋值。但是你的函数将在块完成执行之前 return 。
你需要做的是,在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"]
})
}
}
我有一个功能如下图
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 后应该 return 数组。 但它 return 之前只是一个值,然后执行 findObjectsInBackgroundWithBlock 函数。
在控制台中它打印如下所示的值
1 [] 2015-01-08 16:15:27.922 IndianFood[2268:67055] 成功检索到 2 个分数。
请帮我解决这个问题。
query.findObjectsInBackgroundWithBlock
是一个在后台线程中执行的异步方法。 self.dummyArray
只有在后台线程完成下载并找到数据后才会被赋值。但是你的函数将在块完成执行之前 return 。
你需要做的是,在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"]
})
}
}