2016-07-30 65 views
1

我遇到了一些问题,使segue能够正常工作。在swift中启动segue的问题

其他一切正在工作,如保存用户名和密码解析。但是当用户按下sign uplog in时,segue不起作用。

这里是我的代码:

import UIKit 
import Parse 

class ViewController: UIViewController { 

// Declaring variables & functions 
var signupMode = true 

var acitivityIndicator = UIActivityIndicatorView() 

func displayAlert (title: String, message: String) { 

    let alertController = UIAlertController(title: title, message: title, preferredStyle: .alert) 

    alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 

    self.present(alertController, animated: true, completion: nil) 


} 


// First view controller outlets/actions 
@IBOutlet var signupButton: UIButton! 
@IBOutlet var loginButton: UIButton! 

@IBOutlet var emailTextField: UITextField! 
@IBOutlet var passwordTextField: UITextField! 

@IBAction func signupAction(_ sender: AnyObject) { 

    if emailTextField.text == "" && passwordTextField.text == "" { 

     displayAlert(title: "Error in form", message: "Please enter both an email and password") 

    } else { 

     acitivityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50, height: 50)) 
     acitivityIndicator.center = self.view.center 
     acitivityIndicator.hidesWhenStopped = true 
     acitivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
     view.addSubview(acitivityIndicator) 
     acitivityIndicator.startAnimating() 
     UIApplication.shared().beginIgnoringInteractionEvents() 

     if signupMode { 

      // Sign Up 

      let user = PFUser() 

      user.username = emailTextField.text 
      user.password = passwordTextField.text 

      user.signUpInBackground(block: { (success, error) in 

       self.acitivityIndicator.stopAnimating() 
       UIApplication.shared().endIgnoringInteractionEvents() 

       if error != nil { 

        var displayErrorMessage = "Please try again later." 

        if let errorMessage = error?.userInfo["error"] as? String { 

         displayErrorMessage = errorMessage 

        } 

        self.displayAlert(title: "Signup Error", message: displayErrorMessage) 

       } else { 

        print("user signed up") 

        self.performSegue(withIdentifier: "HomePageViewController", sender: self) 
       } 


      }) 


     } 


     } 

    } 


@IBAction func loginAction(_ sender: AnyObject) { 

    acitivityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50, height: 50)) 
    acitivityIndicator.center = self.view.center 
    acitivityIndicator.hidesWhenStopped = true 
    acitivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
    view.addSubview(acitivityIndicator) 
    acitivityIndicator.startAnimating() 
    UIApplication.shared().beginIgnoringInteractionEvents() 

    let userEmail = self.emailTextField.text 

    let userPassword = self.passwordTextField.text 

    PFUser.logInWithUsername(inBackground: userEmail!, password:userPassword!) { 
     (user: PFUser?, error: NSError?) -> Void in 
     if user != nil { 

       self.performSegue(withIdentifier: "HomePageViewController", sender: self) 

     } else { 

      self.acitivityIndicator.stopAnimating() 

      } 
     } 

    } 

回答

1

尝试在主线程原因请看

dispatch_async(dispatch_get_main_queue()) { 
    self.performSegue(withIdentifier: "HomePageViewController", sender: self) 
} 
+0

感谢。由于显然是语法的更新,Swift不会允许我使用你的代码。这是它现在的样子:DispatchQueue.main.asynchronously(){ self.performSegue(withIdentifier:“HomePageViewController”,sender:self) }正面的事情是发生了什么,但现在我得到一个线程1错误: signal SIGARBT – user6155249

+0

'DispatchQueue.main.async {self.performSegue(withIdentifier:“HomePageViewController”,sender:self) }' – Chandan

+0

是否有任何日志然后共享,可能是某些插座的问题不存在于您的代码中但在HomePageViewController的故事板中显示为黄色简单。它只是我的猜测。 – Chandan