Ich versuche mich über den Swift einzuloggen. Ich bekomme die richtigen Daten in Form von JSON und in der Lage, die Daten zu extrahieren, aber wenn ich versuche, die Erfolgsmeldung im Terminal zu drucken, dann muss ich zweimal auf den Login-Button drücken.Wie navigiere ich zu einem anderen Viewcontroller, nachdem ich eine Antwort vom Server bekommen habe
@IBAction func loginButton(sender: UIButton) {
//test.text = usernameText.text
let user = usernameText.text!
let pass = passwordText.text!
let a = "http://www.example.com/app/login.php?username="
let b = "&password="
let c = a + user + b + pass
let url = NSURL(string: "\(c)")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in
if let urlContent = data {
do {
let jsonResult: NSDictionary = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
if let custdetails : [NSDictionary] = jsonResult["data"] as? [NSDictionary] {
for person: NSDictionary in custdetails {
//for (name,value) in person {
// print("\(name) , \(value)")
//print(person.valueForKey("CustId")!)
//}
let userid:String = person.valueForKey("CustId") as! String
print(userid)
//NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IsUserLoggedIn")
NSUserDefaults().setString(userid, forKey: "userName")
NSUserDefaults.standardUserDefaults().synchronize()
self.dismissViewControllerAnimated(true, completion: nil)
self.message = jsonResult["message"] as! String
}
}
} catch {
print("JSON serialization failed")
}
}
}
task.resume()
print(message)
//navingation code
}
Ich habe die Benutzer-ID gedruckt, wenn ich von der json erhalte SO, wenn ich auf dem Login-Button klicken kann ich die ID in der Konsole sehen, aber kann nicht die Meldung, die ich auf der zweiten letzte Zeile gedruckt
Wenn ich wieder auf den Login-Button klicke, wird die Nachricht gedruckt und die ID wird ebenfalls erneut gedruckt, was bedeutet, dass mein Code das zweite Mal ausgeführt wird.
Vielen Dank für Ihre Hilfe im Voraus Jede Hilfe wird geschätzt.
Sie sollten Ihre 'disneyViewController' in der Hauptwarteschlange versenden. Es ist auch nicht notwendig, '' '' auf 'NSUserDefaults' zu synchronisieren. Der Grund, warum Sie können nicht die 'print (Nachricht) finden Sie unter' ist, dass der Netzwerkbetrieb (im Hintergrund) asynchron abgeschlossen ist, so dass, wenn der Druck der Daten ausführt, hat sich nicht aus dem Netz noch abgerufen wurden – Paulw11