Ich versuche, die nächste:Warum startet NSOperation vor dem Abschluss der vorherigen Operation?
- ich Antwort von Alamofire zu erhalten, füllen ein Array
- drucken Array
für das ich getan habe:
var queue = NSOperationQueue()
let firstOperation = NSBlockOperation(block: {
let getMyProfileURL = "\(self.property.host)\(self.property.getMyProfile)"
Alamofire.request(.POST, getMyProfileURL, parameters: self.userParameters.profileParameteres, encoding: .JSON).responseJSON { response in
do {
let json = JSON(data: response.data!)
print(json)
if json["user"].count > 0 {
self.profileDetails.append(ProfileDetailsModel(json: json["user"]))
}
}
}
})
firstOperation.completionBlock = {
print("firstOperation completed")
}
queue.addOperation(firstOperation)
let secondOperation = NSBlockOperation(block: {
print(self.profileDetails)
})
secondOperation.addDependency(firstOperation.completionBlock)
secondOperation.completionBlock = {
print(self.profileDetails)
}
queue.addOperation(secondOperation)
So, in der Theorie, zuerst muss es füllen mein Array, vervollständigen diese Aufgabe (Block) und nur später diese Array drucken. Aber ich bekomme:
firstOperation completed
[] -> self.profileDetails from the secondOperation
[] -> self.profileDetails from the secondOperation completion block
and just here I get my JSON from the Alamofire 'do' block
Also, was habe ich falsch gemacht? Und wie kann ich es reparieren, dass es funktioniert, wie ich will?
Ihr Block kehrt zurück (und damit der Vorgang abgeschlossen), sobald die Anforderung erlischt, wird nicht auf einen asynchronen Aufruf gewartet. – dan
Gibt es eine Lösung dafür? Ich möchte volle Array bekommen, bevor ich anfangen werde es zu drucken @dan –