自从Swift调用parse.com课程2天以来,我一直在努力解决问题 .
- 我在UIViewController类的根目录中声明了一个变量
var myVariable:String?
- 我创建了一个函数来调用数据库并返回一个值
func retrieveData(){
// Create the query
var queryTest:PFQuery = PFQuery(className: "myClasseName")
// Where clause
queryTest.whereKey("columnName", equalTo: "someText")
queryTest.getFirstObjectInBackgroundWithBlock { (myParseObject:PFObject!, errreur: NSError!) -> Void in
self.myVariable = myParseObject["nameOfColumnOfContainerTheValueToBeReturned"] as? String
println("valeurTest dans la BD = \(self.myVariable)")
}
}
到目前为止,函数内的println返回了我的值!大
当我在viewDidLoad中调用我的函数时,问题就开始了 . 我想通过调用retrieveData()函数来更改myVariable的值 . 但是,变量值不会改变!
override func viewDidLoad() {
super.viewDidLoad()
self.retrieveData()
// The myVariable value should change
println("My new value =\(self.myVariable)")
}
谢谢你的帮助!
1 回答
getFirstObjectInBackgroundWithBlock
是异步的(即它在后台线程上执行),因此在访问该值之前必须等待它完成 . 在调用getFirstObjectInBackgroundWithBlock
's method, you'之后尝试立即打印,尝试打印尚未检索的变量,因为getFirstObjectInBackgroundWithBlock
没有足够的时间来获取数据 .在您的第一个代码块中,
self.myVariable
能够成功打印,因为它在块内执行,因此在获取完成后 .