2016-08-09 52 views
0

Hallo Ich bin eine einfache Anwendung, mit der Registrierung versuchen, und wenn Sie fertig sind, gehen Sie zu Hause Blick, aber wenn ich versuche Homeview zu gehen, um meine app stürztRegistrieren und Anmelden swift

Dies ist der Code

@IBAction func Registrar(sender: AnyObject) { 

     let userName = UserName.text! 
     let userEmail = UserEmail.text! 
     let medicRegistry = MedicRegistry.text! 
     let specialty = Speciality.text! 
     let country = Country.text! 
     let city = Ciudad.text! 
     let userPass = UserPassword.text! 
     let repeatPass = RepeatPassword.text! 



     if (userName.isEmpty || userEmail.isEmpty || medicRegistry.isEmpty || speciality.isEmpty || country.isEmpty || city.isEmpty || userPass.isEmpty || userEmail.isEmpty) { 

      let alertView:UIAlertView = UIAlertView() 
      alertView.title = "Sign Up Failed!" 
      alertView.message = "Por favor llene todos los campos" 
      alertView.delegate = self 
      alertView.addButtonWithTitle("OK") 
      alertView.show() 
     } else if (userPass != repeatPass) { 

      let alertView:UIAlertView = UIAlertView() 
      alertView.title = "Sign Up Failed!" 
      alertView.message = "Passwords doesn't Match" 
      alertView.delegate = self 
      alertView.addButtonWithTitle("OK") 
      alertView.show() 

      //NSUserDefaults.standarUserDefaults().setObject(id, forKey:"userId") 
      //NSUserDefaults.standarUserDefaults().synchronize() 
     }else if check == false{ 
      let alertView:UIAlertView = UIAlertView() 
      alertView.title = "Fallo al Registrar!" 
      alertView.message = "Debes aceptar los terminos y condiciones" 
      alertView.delegate = self 
      alertView.addButtonWithTitle("OK") 
      alertView.show() 


     } 

     else { 

      let url_servicio = "http://mydirection.php" 

       let request = NSMutableURLRequest(URL: NSURL(string: url_servicio)!) 
       request.HTTPMethod = "POST" 
      let postString = "nombre=\(userName)&email=\(userEmail)&registro=\(medicRegistry)&esp=\(specialty)&pais=\(country)&ciudad=\(city)&contrasena=\(userPass)" 
      request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
      let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error -> Void in 
       if (error != nil){ 
        print(error!.localizedDescription) 
       }else{ 
        let nsdata:NSData = NSData(data: data!) 

        do{ 
         let json = try NSJSONSerialization.JSONObjectWithData(nsdata, options: NSJSONReadingOptions.MutableContainers) 
         let Id = json["id"] as! String 
         let c: String = "" 


         if (Id != c){ 
          print (Id) 
       self.performSegueWithIdentifier("funciona", sender: self) 
         } 
        } 
        catch{ 
         print("Error del JSON") 

        } 
       } 
      } 
      task.resume() 

        } 
     } 
} 

Error ich es schaffen, die ID zu drucken, aber wenn dann nur crash ich bin neu in diesem und ich weiß nicht, was falsch ist thx für Ihre Hilfe.

enter image description here

+2

Was ist Ihr Fehlerprotokoll ?? Woher bekommst du Fehler? –

+1

So können Sie die ID drucken? Das bedeutet, dass bis zum Druck (Id) estalog = true line alles funktioniert. Vielleicht ist der Fehler in Ihrem Segment. Haben Sie daran gedacht, den "funciona" -Kennzeichner in Ihrem Segment zu setzen? –

+0

hast du ein Segment namens 'funciona' im Storyboard? –

Antwort

0

Die Antwort ist in der Fehlermeldung: "Nur auf dem Haupt-Thread ausgeführt".

Ihr Completion-Handler wird im Hintergrund ausgeführt, versucht jedoch, die Benutzeroberfläche mithilfe eines Segments zu ändern. Sie sollten Ihre performSegueWithIdentifier zurück zum Hauptthread schicken.

+0

Sie verwenden "Self.dismissViewControllerAnimatedself.dismissViewControllerAnimated"? –

+0

Ich verstehe deinen Kommentar nicht. Ich habe nichts über "entlassen" gesagt. –

+0

haha ​​sorry, zuerst danke für die Hilfe, ich bin neu in swift lenguage, können Sie erklären, wo ist der Fehler in meinem Code, wenn Sie Zeit plz haben –

0

Ich empfehle die Verwendung Alamofire. Die Funktion dataTaskWithRequest scheint nicht im Hauptthread ausgeführt zu werden und führt zu Konflikten.

Wenn Sie nicht auf Alamofire ändern möchten. So verwenden Sie das:

dispatch_async(dispatch_get_main_queue(),{ 
    //here your segue 
}) 
+0

in der Tat, ich beginne über den Versand mit Phillip Mills ansewer zu untersuchen, aber danke für die Informationen über Alamofire, ich werde darüber lesen, wenn ich kann, & Tyvm –

+0

@elkin sepulveda, Diese Antwort Es ist genau das, was Phillip Mills bedeutet. Sie senden den Haupt-Thread mit dem Code, den ich Ihnen hinterlassen habe. – jose920405