ios – 无法打开下一个ViewController – ***断言失败 – [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished]

ios – 无法打开下一个ViewController – ***断言失败 – [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished],第1张

概述我只在登录过程中遇到此问题.在当前控制器连接外部数据库(添加用户名和密码后)和获取响应应用程序后应解除当前控制器并应打开下一个视图控制器.我正确地得到了服务器响应. let postString = “lgn=sedr&UNAME=\(userName)&PASSWORD=\(password)"let request=NSMutableURLRequest(URL: NSURL(strin 我只在登录过程中遇到此问题.在当前控制器连接外部数据库(添加用户名和密码后)和获取响应应用程序后应解除当前控制器并应打开下一个视图控制器.我正确地得到了服务器响应.

let poststring  = “lgn=sedr&Uname=\(username)&PASSWORD=\(password)"let request=NSMutableURLRequest(URL: NSURL(string:url)!)request.httpMethod = "POST";request.httpBody = poststring.dataUsingEnCoding(NSUTF8StringEnCoding)let task = NSURLSession.sharedSession().dataTaskWithRequest(request,completionHandler:{ ( data,response,error) -> VoID in    print(NSThread.isMainThread())    if error != nil {        // print("error=\(error)")        return    }    var parsingError: NSError?    if let dictionary = NSJsONSerialization.JsONObjectWithData(data,options: nil,error: &parsingError) as NSDictionary? {        println("dic: \(dictionary)")        if var suc:AnyObject=dictionary["success"] {            println("success: \(suc)")            if((suc as AnyObject! as Int)==1) {                if let userID  = dictionary["userID"] {                    println("userID: \(userID)")                    //Save data                    NSUserDefaults.standardUserDefaults().setobject("true",forKey:"isLogged");                    NSUserDefaults.standardUserDefaults().setobject(userID,forKey:"userID");                    NSUserDefaults.standardUserDefaults().synchronize();                    var storyboard: UIStoryboard =   UIStoryboard (name: "Main",bundle: nil)                    var vc: UIVIEwController = storyboard.instantiateVIEwControllerWithIDentifIEr("BControllerID") as UIVIEwController                    self.presentVIEwController(vc,animated: true,completion: nil )                } else {                    self.displayErrorAlert("Oops! Error");                }            }        }    }});task.resume();

这是我得到的错误日志:

2016-12-12 14:14:42.911 appService[39180:1705287] *** Assertion failure in -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished],/SourceCache/UIKit_Sim/UIKit-3318.93/Keyboard/UIKeyboardTaskQueue.m:3742016-12-12 14:14:42.917 appService[39180:1705287] *** Terminating app due to uncaught exception 'NSInternalinconsistencyException',reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'

我有更多的控制器做类似的过程,但我只得到这个控制器的这个例外.

从互联网上发现,由于不存在相关断言而没有使用主线程进行UI更新,因此发生此错误.我检查了所有组件,所有组件都存在.我认为这是因为没有使用主线程.但我不知道如何解决它.

解决方法 您需要在主线程上调用新控制器,而不是在后台线程上调用.当前,您在不在主线程上呈现视图的块.使用像这样呈现视图控制器的调度队列:

dispatch_async(dispatch_get_main_queue(),{var storyboard: UIStoryboard =   UIStoryboard (name: "Main",bundle: nil)var vc: UIVIEwController = storyboard.instantiateVIEwControllerWithIDentifIEr("BControllerID") as UIVIEwControllerself.presentVIEwController(vc,completion: nil )}

或者在swift 3中像这样:

dispatchQueue.main.async { //your block of code }
总结

以上是内存溢出为你收集整理的ios – 无法打开下一个ViewController – ***断言失败 – [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished]全部内容,希望文章能够帮你解决ios – 无法打开下一个ViewController – ***断言失败 – [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1005626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存