2015-07-13 8 views
5

Nell'app per iOS attualmente in costruzione, sto cercando di mostrare un messaggio all'utente quando la sessione è scaduta. Ho letto la documentazione per NSURLSessionDelegate ma non sono riuscito a trovare alcun metodo per avermi informato se la sessione è scaduta. Come procedo a fare questo? Qualsiasi aiuto è apprezzato.iOS Swift: come trovare se è scaduto un NSURLSession

+0

io non sono sicuro se si applica a 'NSURLSession', ma' NSURLConnection' fallirà e il metodo delegate verrà chiamato con un codice di errore di 'NSURLErrorTimeOut', come descritto in questa risposta: http://stackoverflow.com/a/12819297/433373 (MODIFICA: la risposta id su '-sendSynchronousRequest: returnResponse: error:', ma '-connection: didFailWithError:' restituisce anche un oggetto 'NSError'. È possibile controllare che) –

risposta

8

È possibile chiamare il metodo in questo modo:

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

Non sembra molto robusto (o prova futura). Stai hard-coding la descrizione dell'errore; potrebbe cambiare in un futuro aggiornamento del sistema operativo (non per consentire all'utente di avere il proprio dispositivo impostato su un'altra lingua rispetto all'inglese). –

+0

puoi usare: print (error ?? "ErrorDefault") – johnny

0

Sto usando seguente Swift extension per verificare se l'errore è di timeout o altro errore di rete, utilizzando 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 
     } 
    } 

}