2015-07-13 5 views
5

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

+0

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) –

Antwort

8

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() 
+0

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). –

+0

können Sie verwenden: Drucken (Fehler ?? "ErrorDefault") – johnny

0

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 
     } 
    } 

} 
Verwandte Themen