この問題はログインプロセスでのみ発生しています。現在のコントローラでは、(ユーザ名とパスワードを追加した後に)外部データベースに接続し、応答アプリケーションを取得した後に、現在のコントローラを終了し、次のView Controllerを開く必要があります。私はサーバーの応答を正しく取得しています。次のViewControllerを開くことができません - ***アサーションエラー - [UIKeyboardTaskQueue waitUntilAllTasksAreFinished]
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:374
2016-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アップデートに使用していないために発生します。私はすべてのコンポーネントをチェックし、それらのすべてが存在します。私はこれがメインスレッドを使用していないためだと思います。しかし、私はそれを解決する方法を知らない。
ありがとう:このような
または3 SWIFT中:このようなビューコントローラを提示ディスパッチキューを使用してください。 –