ios - View 在闭包表达式中没有改变

标签 ios swift


我有这段代码:

@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/

相关文章:

swift - subview 中无响应的 UIButton 添加到 UIStackView

ios - 如何在 info.plist 中打开隐私 VPN 配置

ios - Firebase 引用调用未返回正确的对象(Swift)

iOS:如何使用 UIButton 重新生成 UIImageView

ios - Stripe iOS 集成——我怎么知道 Stripe 是否真的收到了我的测试输入?

ios - 从分割 View Controller 内部测试 UITableViewCell 是否存在失败

ios - 如何将父应用程序添加到现有的独立 iMessage 应用程序

ios - 在 iOS 中通过谷歌搜索图片

ios - 如何版本控制重叠的文件夹结构?

android - 引用错误 : Camera Is Not Defined