Ios 如何使用全局函数以编程方式返回根视图控制器?
我有三个主要的VC(我的帐户,注册,登录)。然后我有一个Swift文件(Manager.Swift),我在其中设置了一个类函数,在注册或登录之后,它将关闭VC 斯威夫特经理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
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.
}
我懂了。这就是我所缺少的。是的,只要在代码中添加这个,它就会工作得很好:)