2016-07-30 16 views
1

Ich habe einige Probleme, ein Segment zu bekommen, um richtig zu arbeiten.Probleme mit dem Einleiten von segue in swift

Alles andere funktioniert, wie das Speichern des Benutzernamens und des Passworts zum Parsen. Aber wenn der Benutzer entweder sign up oder log in drückt, funktioniert die segue nicht.

Hier ist mein Code:

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() 

      } 
     } 

    } 

Antwort

1

Versuchen in Haupt-Thread segue

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

Dank. Swift erlaubte mir nicht den exakten Code, da es anscheinend eine Aktualisierung der Syntax gab. So sieht es jetzt aus: DispatchQueue.main.asynchronously() { self.performSegue (withIdentifier: "HomePageViewController", sender: self) } Das Positive ist, dass etwas passiert, aber jetzt bekomme ich einen Thread 1 Fehler: Signal SIGARBT – user6155249

+0

'DispatchQueue.main.async { //self.performSegue(withIdentifier:" HomePageViewController ", Absender: selbst) }' – Chandan

+0

Gibt es ein Protokoll dann teilen, möglicherweise Ausgabe von einigen Steckdose ist nicht in Ihrem Code vorhanden aber im Storyboard von HomePageViewController erscheint als eine gelbe einfache. Es ist nur eine Vermutung von mir. – Chandan