我正在尝试从登录传递到View Menu Controller(id storyboard:menu)。
要切换View Controller,我在登录按钮中有一个segue,登录与Login.swift相关联。
在Login.swift中单击LOGIN按钮执行以下操作:
Request().login(tag, email: email, pass: pass)
在请求中我有这个:
class Request {
func login(tag : String, email : String, pass : String){
let url = NSURL(string: "xxx");
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST";
let postString = "tag="+tag+"&email="+email+"&password="+pass;
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let session = NSURLSession.sharedSession();
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
let json = JSON(data: data!)
Login().passPostData(json)
});
task.resume();
}}
在登录passPostData:
func passPostData(json: JSON){
let total = json.count
for i in 0..<total{
let id = json[i]["id"].string!
let username = json[i]["username"].string!
let birthday = json[i]["birthday"].string!
let location = json[i]["location"].string!
let email = json[i]["email"].string!
let photo = json[i]["photo"].string!
print(id + " - " + username + " - " + birthday + " - " + location + " - " + email + " - " + photo)
}
SwiftLoading().hideLoading()
//self.performSegueWithIdentifier("goToMenu", sender: self)
//let menuController = self.storyboard?.instantiateViewControllerWithIdentifier("menu") as? ViewMenuController
//self.navigationController?.pushViewController(menuController!, animated: true)
//let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil);
//let vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("menu") as UIViewController;
//self.presentViewController(vc, animated: true, completion: nil);
}
注释行是我尝试访问View Menu Controller的所有方法。
尝试时:
self.performSegueWithIdentifier("goToMenu", sender: self)
我收到此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<xxx.Login: 0x7f9d28545000>) has no segue with identifier 'goToMenu''
但是Login和View Menu Controller之间的segue被分配了标识符goToMenu
尝试时:
let menuController = self.storyboard?.instantiateViewControllerWithIdentifier("menu") as? ViewMenuController
self.navigationController?.pushViewController(menuController!, animated: true)
不要工作或失败。
尝试时:
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil);
let vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("menu") as UIViewController;
self.presentViewController(vc, animated: true, completion: nil);
我收到此错误:
Warning: Attempt to present <xxx.ViewMenuController: 0x7f9139ef46e0> on <xxx.Login: 0x7f9139d871c0> whose view is not in the window hierarchy!
我该怎么做?
答案 0 :(得分:0)
为了解决这个问题,我发送了自我&#39;从@IBAction登录到Request()。登录并再次传递发送者os Request()。登录到passPostData并使用sender.self.performSegueWithIdentifier中的sender与dispatch_async(dispatch_get_main_queue())
@IBAction func login(sender: UIButton) {
let email : String = emailText.text!
let pass : String = passText.text!
let tag : String = "login"
if(email != "" && pass != ""){
Request().login(self, tag: tag, email: email, pass: pass)
SwiftLoading().showLoading()
}
}
func passPostData(sender: AnyObject, json: JSON){
let total = json.count
for i in 0..<total{
let id = json[i]["id"].string!
let username = json[i]["username"].string!
let birthday = json[i]["birthday"].string!
let location = json[i]["location"].string!
let email = json[i]["email"].string!
let photo = json[i]["photo"].string!
print(id + " - " + username + " - " + birthday + " - " + location + " - " + email + " - " + photo)
}
SwiftLoading().hideLoading()
dispatch_async(dispatch_get_main_queue()) {
sender.self.performSegueWithIdentifier("goToMenu", sender: sender.self)
}
}
和
class Request {
func login(sender: AnyObject, tag : String, email : String, pass : String){
let url = NSURL(string: "xxx");
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST";
let postString = "tag="+tag+"&email="+email+"&password="+pass;
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let session = NSURLSession.sharedSession();
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
let json = JSON(data: data!)
Login().passPostData(sender, json: json)
});
task.resume();
}}