Ich versuche, diesen Completion-Handler zu finden, aber ich kann mich einfach nicht darum kümmern. Ich habe dieses Programm, das ich versuche, eine JSON-Datei herunterzuladen und zu analysieren. Alles funktioniert gut, aber ich möchte, dass die Benutzeroberfläche aktualisiert wird, nachdem die Datei heruntergeladen und analysiert wurde. Ich muss den Knopf zweimal drücken, um es zur Arbeit zu bringen. Ich weiß, warum das passiert. Der Code arbeitet im asynchronen Stil und geht einfach um die Benutzeroberfläche mit nichts zu aktualisieren. Wie kann ich dafür sorgen, dass der JSON das Parsen und Herunterladen beendet? Vielen Dank für jede Hilfe und Tipps zu diesemSwift completion handeler Ausgabe
Dies ist, was ich bisher:
@IBAction func testerClick(sender: AnyObject) {
print("Button pushed")
print("Downloading the json file")
downlaodPromoData(promoUrl, myUser: myUserName, myPass: myPassword)
}
func parsePromoJson(json : String)
{
//parse the json file
if let data = downloadJson.dataUsingEncoding(NSUTF8StringEncoding) {
let json = JSON(data: data)
for item in json[].arrayValue {
pictures.append(item["picture"].stringValue)
}
for item in json[].arrayValue{
path.append(item["path"].stringValue)
}
for item in json[].arrayValue{
label.append(item["label"].stringValue)
}
}
// Loop over the array with a for-loop.
for i in 0 ..< pictures.count {
uiResultsTextField.text.appendContentsOf("Picture: " + pictures[i] + "\n" + "Path: " + path[i] + "\n" + "Label: " + label[i] + "\n")
}
}
func downlaodPromoData(myUrl : String, myUser : String, myPass : String)
{
Alamofire.request(.GET, myUrl)
.authenticate(user: myUser, password: myPass)
.validate(statusCode: 200..<300)
.responseString { response in
print("Success: \(response.result.isSuccess)")
print("Response String: \(response.result.value)")
self.downloadJson = response.result.value!
/*
.response {(request, response, data, error) in
print(response)
print(data)
print(request)
*/
}.responseJSON { response in
print("Response JSON: \(response.result.value)")
}
print("Calling parser")
parsePromoJson(downloadJson)
}
versuchen Sie, den Aufruf von 'parsePromoJson()' innerhalb des Callbacks '.responseString' zu verschieben, direkt nach der Zeile 'self.downloadJson = response.result.value!' – pbodsk
Danke, dass dein Vorschlag richtig war. Danke für Ihre Hilfe – MNM