自从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)")
}
感谢您的帮助!
答案 0 :(得分:0)
getFirstObjectInBackgroundWithBlock
是异步的(即它在后台线程上执行),因此在访问该值之前必须等待它完成。通过在调用getFirstObjectInBackgroundWithBlock
方法后立即尝试打印,您尝试打印尚未检索的变量,因为getFirstObjectInBackgroundWithBlock
没有足够的时间来获取数据。
在您的第一个代码块中,self.myVariable
能够成功打印,因为它在块中执行,因此在提取完成后