xcode在宁静的回调中呈现segue(swift)

Kei*_*mes 1 iphone ios segue swift xcode6

我是自学Swift用户并试图做一些简单的事情,但它让我很难过.我有一个简单的登记表.在提交注册项目后,我想通过segue将页面移动到"如何工作"页面,但仅当我的restful API返回成功时.这是我到目前为止所拥有的; 随时给我一个更好的方法来做这件事.所有的批评都是受欢迎的.

let myUrl = NSURL(string:"http://www.example.com/scripts/Register.php")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"

let postString = "email=\(email)&password=\(pass)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
    data, response, error in

    if (error != nil) {
        println("Error: \(error)")
        return
    }

    var err: NSError?
    var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary
    var showTutorial : Bool = false

    if let parseJSON = json {
        var returnValue = parseJSON["status"] as? String
        println("Status: \(returnValue)")

        var isUserRegistered: Bool = false
        if (returnValue == "Success") {
            showTutorial = true
        } else if (returnValue == "Error") {                    
            // handle error
        }
    }

    // if successful registration, show how it works page
    if (showTutorial) {
        self.performSegueWithIdentifier("howItWorksSegue", sender: self)
    }
}
task.resume()
Run Code Online (Sandbox Code Playgroud)

我有一个名为howItWorksSegue附加到此视图控制器的segue HowItWorksViewController.我从Xcode收到此错误:

2015-10-12 21:22:43.261 ZiftDine [11396:2307755]断言失败 - [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished],/ SourceCache/UIKit_Sim/UIKit-3347.44.2/Keyboard/UIKeyboardTaskQueue.m:374
2015-10-12 21: 22:43.391 ZiftDine [11396:2307755]由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished]只能从主线程调用.

Swi*_*y89 7

用UI做的任何事情都应该在主线程上完成,尝试包装你执行如下调用的调用:

dispatch_async(dispatch_get_main_queue(),{
    self.performSegueWithIdentifier("howItWorksSegue", sender: self)
})
Run Code Online (Sandbox Code Playgroud)

  • @KJBonds如果这个答案解决了问题,你应该将其标记为已接受. (3认同)