Ich brauche die Variable 'response', die aus "dataTaskWithRequest" entnommen werden kann. Momentan wird 'Antwort' nicht gefunden, da sie außerhalb der Klammern liegt. Wie kann ich sicherstellen, dass die Antwortvariable an das UIAlert übergeben wird? DankSwift UIAlert - Daten von dataTaskWithRequest abrufen
Hier ist mein Code:
@IBAction func buttonCreateAccount(sender: AnyObject) {
let request = NSMutableURLRequest(URL: NSURL(string: "http://www.example.com/createaccount.php")!)
request.HTTPMethod = "POST"
let postString = "user_name=\(username.text!)&email=\(email.text!)&password=\(password.text!)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
print("response = \(response)")
let response = String(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(response)")
}
task.resume()
//problem is here. 'response' variable cannot be taken from above. i need it to be taken from above.
if response == "Username taken" {
if let getModernAlert: AnyClass = NSClassFromString("UIAlertController") { // iOS 8
let myAlert: UIAlertController = UIAlertController(title: "Registration", message: response, preferredStyle: .Alert)
myAlert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
self.presentViewController(myAlert, animated: true, completion: nil)
} else { // iOS 7
let alert: UIAlertView = UIAlertView()
alert.delegate = self
alert.title = "Registration"
alert.message = "Testing"
alert.addButtonWithTitle("OK")
alert.show()
}
} else {
if let getModernAlert: AnyClass = NSClassFromString("UIAlertController") { // iOS 8
let myAlert: UIAlertController = UIAlertController(title: "Registration", message: response, preferredStyle: .Alert)
myAlert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
self.presentViewController(myAlert, animated: true, completion: nil)
} else { // iOS 7
let alert: UIAlertView = UIAlertView()
alert.delegate = self
alert.title = "Registration"
alert.message = "Testing"
alert.addButtonWithTitle("OK")
alert.show()
self.dismissViewControllerAnimated(true, completion: {});
}
}
}
Der Abschluss-Block (der Code, den Sie angegeben haben, unmittelbar unter 'NSURLSession.sharedSession() dataTaskWithRequest (Anfrage)' wird asynchron ausgeführt werden - es wird erst die ausgeführt werden Die Anfrage wird tatsächlich abgeschlossen, was nach Aufruf dieser Funktion wahrscheinlich mehrere Millisekunden bis einige Sekunden dauern wird Der Code unterhalb Ihres Kommentars wird ** sofort ** ausgeführt, zu diesem Zeitpunkt haben Sie keine "Antwort" mehr, mit der Sie arbeiten können Sie müssen auch den gesamten Code der Antwortverarbeitung in den Completion-Block verschieben, damit er erst ausgeführt wird, wenn die Antwort verfügbar ist. –