Ich bin Neuling für die Entwicklung der IOS-Anwendung, ich versuche, https Web-Server zu verbinden, hatte ich Problem konfrontiert Ich bin nicht in der Lage, die selbstsignierte Zertifikat zu verbinden, also habe ich net gesucht In dem ich unten angegebenen Code gefolgt habe funktioniert es gut . aber seine Arbeit asynchronen mode.so Ich brauche bis zur vollständigen Aufgabe warten und kehrt die data.Please gab eine Idee?/Wie synchrone Anforderung mithilfe von NSOperationQueue?
func requestAsynChronousData(request: NSURLRequest)->NSData? {
let data: NSData? = nil
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue())
let task = session.dataTaskWithRequest(request){ (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if error == nil {
print("RESULTTTT\(data)")
}
}
task.resume()
return data;
}
func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
print("WAITING!!!!!!!!!!!!!COMPLETIONHANDLER")
completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!))
}
Sofern Sie dies nicht auf einem sekundären Thread tun, sollten Sie keine synchronen URL-Anfragen * jemals * tun. Grundsätzlich wird die Ablehnung aus dem App Store garantiert, da iOS Apps, die den Hauptthread blockieren, automatisch für mehr als ein paar Sekunden beendet und ein HTTP-Timeout bis zu 90 Sekunden dauert. Alles, was synchron ausgeführt werden kann, kann auch asynchron erfolgen. Sie müssen nur darum herum entwerfen. Anstatt eine Funktion zu schreiben, die einen Wert zurückgibt, können Sie beispielsweise eine Funktion schreiben, die einen Block übernimmt und den Wert an diesen Block weitergibt, wenn die Anforderung abgeschlossen ist. – dgatwood