我有这段代码:
@IBAction func createUser(sender: AnyObject, forEvent event: UIEvent) {
userManager!.createUser( username.text, {
println( "new user created" )
self.navigationController.popToRootViewControllerAnimated( true )
self.callback!()
})
}
但是当这个函数被调用时, View Controller 并没有改变..
如果我将 popToRootViewControllerAnimated 放在内部闭包表达式之外,即:
@IBAction func createUser(sender: AnyObject, forEvent event: UIEvent) {
userManager!.createUser( username.text, {
println( "new user created" )
self.callback!()
})
self.navigationController.popToRootViewControllerAnimated( true )
}
View 将被更改并且一切正常..
知道为什么吗?
更新: 只是要清楚.. 我确实从 createUser 方法中调用了这个表达式,并且 println 正在打印“新用户创建”。 只是 View 没有改变...
最佳答案
您只能在主线程上更改 UI。由于 popToRootViewControllerAnimated(...)
改变了 UI,它应该在主线程上调用,您可以将它包装在 GCD 调用中:
dispatch_async(dispatch_get_main_queue()) {
if let nc = self.navigationController {
nc.popToRootViewControllerAnimated(true)
}
}
关于ios - View 在闭包表达式中没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24962513/