Ich versuche mit dispatch_group_notify eine HTTP-Anfrage zu senden, wo ich auf das Ergebnis dieses Befehls warten muss, bevor ich meine Verarbeitung fortsetze.schnelle asynchrone Anfrage mit dispatch_group_notify funktioniert nicht
hier ist der folgende Aufruf:
self.save(){(response) in
if let result = response as? Bool {
if(result == true){
dispatch_group_notify(self.myGroup!, dispatch_get_main_queue(), {
print("send carnet finished")
let registrationView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("carnetTable") as! CarnetTableViewController
self.navigationController?.pushViewController(registrationView, animated: true)
})
}
}
}
und hier ist die Funktion, die den HTTP-Befehl sendet:
func save(callback: (AnyObject) ->()){
dispatch_group_enter(self.myGroup)
let p = pickerDataSource[patients.selectedRowInComponent(0)]
let params = "owner=\(User.sharedInstance.email)&patient=\(p)&carnet=\(commentaires.text!)"
let final_url = url_to_request + "?" + params.stringByAddingPercentEncodingForISOLatin1()!
print("URL addCarnet: \(final_url)")
let url:NSURL = NSURL(string: final_url)!
//let session = NSURLSession.sharedSession()
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: configuration,
delegate: self,
delegateQueue:NSOperationQueue.mainQueue())
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "GET"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
request.timeoutInterval = 10
let task = session.dataTaskWithRequest(request) {
(
let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error data")
dispatch_group_leave(self.myGroup)
callback(false)
return
}
var result = NSString(data: data!, encoding:NSASCIIStringEncoding)!
print("result: \(result)")
}
task.resume()
dispatch_group_leave(self.myGroup)
callback(true)
}
Ich möchte diese Funktion, um sicherzustellen, speichern beendet ist (dispatch_group_leave) vor Öffnen des neuen ViewControllers (CarnetTableViewController), aber ich kann sehen, dass ViewController vor dem Ende der Dispatch-Gruppe ...
aufgerufen wird, wie kann ich en sicher das Ende der Speicherfunktion vor dem Öffnen der neuen Ansicht?