Gestione di un NSURLRequest con timeout quando si utilizza delegato
-
12-09-2019 - |
Domanda
Io sto usando un NSMutableURLRequest per la connessione a un sito web per ottenere una risposta JSON. Sto facendo così generando la richiesta, e quindi utilizzando NSURLConnection con un delegato di sé per gestire la connessione asincrona. Ho implementato tutte le normali metodi delegato:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
Tutto funziona perfettamente con ottenere dati indietro, si occupano di tutti gli errori che si verificano, ecc, tuttavia con il timeout sul NSURLRequest impostato a 10 secondi non mi sembra di avere chiamato in quei metodi (mi aspettavo il didFailWithError per ottenere chiamato ). È situata a lì per sempre e non ho alcuna notifica che scaduta.
Leggendo la documentazione API di iPhone non vedo alcuna menzione di ciò che dovrebbe accadere quando si verifica il timeout, solo che è possibile impostare il valore di timeout. Che cosa dovrebbe accadere? Non ho visto altri metodi delegato della API che avrebbe aiutato. Non devo controllare manualmente per i timeout, fare io? Sono timeout solo per le richieste sincrone?
Soluzione
Il timeout ricevuto in questo metodo:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
Altri suggerimenti
u br ricevere tale tipo di iofo:
in mancò con
di errore: Errore di dominio = Codice NSURLErrorDomain = -1001 UserInfo = 0xed4870 "Scaduta"
Il comportamento di timeout è un po 'eccentrico, vedi questa discussione sul forum degli sviluppatori di Apple.
Quello che ho fatto è stato questo:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
if (error.code == -1001){
[self showTimeoutAlert];//My method to show dialog with timeout message.
} else {
[self showInvalidURLAlert];//My method to show dialog with bad URL message.
}
}
Come detto prima -1001 è per il timeout, in altri test ho avuto -1003 (per cattivo URL o no avaliable connessione).
Puntavo per il trattamento di timeout in modo da niente altro che trattata così male URL.
Mettere alcune dichiarazioni di log in ogni metodo e controllare quello che danno. Ogni volta che il tempo è scaduto, è sicuramente ottenere una notifica sulla console sul timeout. Io sono sempre tale notifica. Controlla il tuo codice e se vi sono ancora problemi, fatecelo sapere.