将视图从任务更改为其他快速

时间:2016-07-11 12:29:24

标签: ios iphone swift xcode segue

我正在尝试从登录传递到View Menu Controller(id storyboard:menu)。

XCODE STORYBOARD

要切换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!

我该怎么做?

1 个答案:

答案 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();
}}