Ios 如何使用全局函数以编程方式返回根视图控制器?

Ios 如何使用全局函数以编程方式返回根视图控制器?,ios,swift,swift2,Ios,Swift,Swift2,我有三个主要的VC(我的帐户,注册,登录)。然后我有一个Swift文件(Manager.Swift),我在其中设置了一个类函数,在注册或登录之后,它将关闭VC 斯威夫特经理 class Manager { class func registerUser(vc: UIViewController?, user_email : String, user_password : String){ let myUrl = NSURL(string: hostURL + "userRegist

我有三个主要的VC(我的帐户,注册,登录)。然后我有一个Swift文件(Manager.Swift),我在其中设置了一个类函数,在注册或登录之后,它将关闭VC

斯威夫特经理

class Manager {

  class func registerUser(vc: UIViewController?, user_email : String, user_password : String){
    let myUrl = NSURL(string: hostURL + "userRegister.php")
    let request = NSMutableURLRequest(URL:myUrl!)

    request.HTTPMethod = "POST";
    // Compose a query string
    let postString = "user_email=\(user_email)&user_password=\(user_password)";

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);

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

        if error != nil
        {
            print("error=\(error)")
            return
        }

        // You can print out response object
        print("response = \(response)")

        // Print out response body
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("responseString = \(responseString)")

        //Let’s convert response sent from a server side script to a NSDictionary object:

        let myJSON = try!NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary

        if let parseJSON = myJSON {

            let status = parseJSON["status"] as? String
            let msg = parseJSON["message"] as? String
            print("Status: \(status)")

            if(status != "Success")
            {
            UIAlert.displayAlert(vc, title: "Error", message: msg!, dismissTxt: "OK")
            }
            else{
                defaults.setBool(true, forKey: "isLoggedIn")

//My Failed attempt to go back to Root :C                    
vc?.navigationController?.popToRootViewControllerAnimated(true)
            }
        }

    }

    task.resume()

}


}
登记册

buttonPressed(sender: AnyObject) {

  Manger.registerUser(self, user_email:username, user_password:password1234)

}
我使用navigationController?.popToRootViewControllerAnimated试图返回 它可以工作,但有时应用程序会崩溃,并抛出以下内容:

2015-10-02 14:51:01.410 Retail_Template[4551:261846]*在[UIKeyboardTaskQueue WaitUntillallTasksRefinished],/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/Keyboard/UIKeyboardTaskQueue.m:378中断言失败 2015-10-02 14:51:01.415 Retail_Template[4551:261846]*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIKeyboardTaskQueue WaituntillallTasksRefinished]只能从主线程调用。” ***第一次抛出调用堆栈: ( 0 CoreFoundation 0x009f8a94例外预处理+180 1 libobjc.A.dylib 0x02b26e02 objc_异常_抛出+50 2 CoreFoundation 0x009f892a+[N异常提升:格式:参数:][138 3基金会0x010BD3E6- [ NSRealStutsHuffer-HuffLeuluIn方法:对象:文件:文件号:描述:] + 118 4 UIKit 0x021f9d2e-[UIKeyboardTaskQueue WaitUntillallTasks完成]+180 5 UIKit 0x019e14f2-[UIKeyboardImpl setDelegate:force::+703 6 UIKit 0x019e122e-[UIKeyboardImpl setDelegate:+60 7 UIKit 0x01ddd1d6-[UIPeripheralHost(UIKitInternal)\ u重新加载响应程序的输入视图:][1208 8 UIKit 0x01de6bef-[UIPeripheralHost(UIKitInternal)\ u preserveInputViewsWithId:animated:reset:+502 9 UIKit 0x01de6c85-[UIPeripheralHost(UIKitInternal)\ u preserveInputViewsWithId:animated:+57 10 UIKit 0x0190dd0a-[UINavigationController导航转换视图:didStartTransition:+1029 11 UIKit 0x01903bf4-[UINavigationController\u startCustomTransition:+5104 12 UIKit 0x01913c0b-[UINAVIGATIONCONTROLLENT\u STARTDEFERREEDTRANSION(如果需要):+801 13 UIKit 0x01914d05-[UINavigationController\uuu视图将布局子视图]+68 14 UIKit 0x01aded9f-[UILayoutContainerView布局子视图]+252 15 UIKit 0x017cb16b-[UIView(CALayerDelegate)布局层的子层:][813 16 libobjc.A.dylib 0x02b3b059-[NSObject性能选择器:withObject:][70 17夸脱芯0x003ed60c-[CALayer布局子层]+144 18夸脱核心0x003e128e锌层16布局(如果需要)PNS 11交易+388 19四芯0x003e10f2 ZN2CA58层布局和显示(如果需要)事务处理+26 20夸脱核心0x003d3c2b_ZN2CA7Context18提交交易PNS_11交易+317 21夸脱芯0x00407c23_Zn2Ca11交易承诺+589 22夸脱芯0x00407fbd_Zn2Ca11变速器14释放_螺纹EPV+289 23 libsystem_pthread.dylib 0x04bc32f7_pthread_tsd_cleanup+93 24 libsystem_pthread.dylib 0x04bc3051_pthread_exit+108 25 libsystem_pthread.dylib 0x04bc3734 pthread_get_stackaddr_np+0 26 libsystem_pthread.dylib 0x04bc0e0e start_wqthread+30 ) libc++abi.dylib:以NSException类型的未捕获异常终止

不知道我做错了什么。 任何解决方案都将不胜感激。谢谢

正如您的错误所说:

只能从主线程调用

您的操作应该被调用到主线程中。如下代码所示:

dispatch_async(dispatch_get_main_queue()) {
    //Perform your task here.
}

我懂了。这就是我所缺少的。是的,只要在代码中添加这个,它就会工作得很好:)