我已经实例化了一个名为array的全局数组,并尝试将字典中的值附加到数组中。我已成功将值从字典复制到数组,但它似乎只在本地。我不确定我做错了什么。请帮我搞清楚。这是代码:
class StudentTableViewController: UITableViewController {
var dict = Dictionary<String, String> ()
var array = [Dictionary<String, String>] ()
//学生
override func viewDidLoad() {
super.viewDidLoad()
queryData()
}
func queryData ()-> (Int, [Dictionary<String, String>]) {
var userQuery = PFUser.query()
//var arr = []
var count : Int
count = 0
userQuery?.whereKey("Type", equalTo:"student")
userQuery?.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
for object in objects! {
self.dict["firstName"] = object["firstName"] as! NSString as String
self.dict["lastName"] = object["lastName"] as! NSString as String
self.dict["contact"] = object["contact"] as! NSString as String
self.array.append(self.dict)
}
println(self.array)
count = self.array.count
})
return(self.array.count, self.array)
// returns 0
// return empty array
}
这里,self.array.count返回0,但我想返回字典成员的计数,self.array只返回空数组,我希望它返回字典。
我已经坚持了一段时间,我不确定为什么它不想成为全球
由于
答案 0 :(得分:0)
findObjectsInBackgroundWithBlock
是异步的,所以当你的方法返回时,该块甚至还没有运行。相反,您需要使用结果调用块中的某些内容。以下是如何通过传递完成块来执行此操作的示例。
override func viewDidLoad() {
super.viewDidLoad()
queryData {
// update view
}
}
func queryData(completionHandler: () -> Void) {
var userQuery = PFUser.query()
var count : Int
count = 0
userQuery?.whereKey("Type", equalTo:"student")
userQuery?.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
for object in objects! {
self.dict["firstName"] = object["firstName"] as! NSString as String
self.dict["lastName"] = object["lastName"] as! NSString as String
self.dict["contact"] = object["contact"] as! NSString as String
self.array.append(self.dict)
}
println(self.array)
count = self.array.count
dispatch_async(dispatch_get_main_queue) {
completion()
}
})
return(self.array.count, self.array)
}