In der iOS App, die ich gerade erstelle, versuche ich dem Benutzer eine Nachricht anzuzeigen, wenn die Sitzung abgelaufen ist. Ich habe die Dokumentation für NSURLSessionDelegate
gelesen, konnte aber keine Methode finden, um mich wissen zu lassen, ob die Sitzung abgelaufen ist. Wie gehe ich dabei vor? Jede Hilfe wird geschätzt.iOS Swift: So finden Sie heraus, ob eine NSURLSession abgelaufen ist
Antwort
können Sie Methode aufrufen, auf diese Weise:
let request = NSURLRequest(URL: NSURL(string: "https://evgenii.com/")!)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in
if error != nil {
if error?.code == NSURLErrorTimedOut {
println("Time Out")
//Call your method here.
}
} else {
println("NO ERROR")
}
}
task.resume()
Sieht nicht sehr robust aus (oder zukunftssicher). Sie codieren die Fehlerbeschreibung hart; Es könnte sich bei einem zukünftigen Betriebssystem-Update ändern (nicht um zu verhindern, dass der Benutzer sein Gerät auf eine andere Sprache als Englisch setzt). –
können Sie verwenden: Drucken (Fehler ?? "ErrorDefault") – johnny
I Swift extension
folgende bin mit zu überprüfen, ob Fehler Time-out oder andere Netzwerkfehler ist, mit Swift 4
extension Error {
var isConnectivityError: Bool {
// let code = self._code || Can safely bridged to NSError, avoid using _ members
let code = (self as NSError).code
if (code == NSURLErrorTimedOut) {
return true // time-out
}
if (self._domain != NSURLErrorDomain) {
return false // Cannot be a NSURLConnection error
}
switch (code) {
case NSURLErrorNotConnectedToInternet, NSURLErrorNetworkConnectionLost, NSURLErrorCannotConnectToHost:
return true
default:
return false
}
}
}
Ich bin nicht Sicher, ob es für 'NSURLSession' gilt, aber 'NSURLConnection' schlägt fehl und die Delegate-Methode wird mit einem Fehlercode 'NSURLErrorTimeOut' aufgerufen, wie in dieser Antwort beschrieben: http://stackoverflow.com/a/12819297/433373 (EDIT: diese Antwort-ID über '-sendSynchronousRequest: returningResponse: error:', aber '-connection: didFailWithError:' gibt auch ein 'NSError'-Objekt zurück. Sie können das überprüfen) –