2009-09-15 6 views
62

Sto utilizzando questo NSURLConnection con i delegati.Timeout NSURLConnection?

nsconnection = [[NSURLConnection alloc] initWithRequest:request 
    delegate:self startImmediately:YES]; 

Il problema è che il sito Web non risponde affatto. Niente, gira solo nel browser con una pagina vuota, senza errori. Nei miei delegati, gestisco l'errore, ma quando il sito non risponde i delegati non vengono richiamati. Qualche idea su come interrompere la connessione?

risposta

127

È possibile specificare un timeout nell'oggetto NSURLRequest. Un modo per farlo è costruirlo tramite il metodo requestWithURL:cachePolicy:timeoutInterval:. (È possibile passare il parametro cachePolicy predefinito NSURLRequestUseProtocolCachePolicy se non si vuole preoccupare di quella parte.) Il timeout è un valore in virgola mobile in secondi, così come lo sono praticamente tutti gli intervalli di tempo nell'SDK di iPhone.

Verificare inoltre che il delegato di NSURLConnection sia impostato e risponda al metodo connection:didFailWithError:. Una connessione chiama sempre questo metodo o connectionDidFinishLoading: al completamento della connessione.

+0

Il delegato funziona e non risponde quando un errore viene inviato dal server web. In questo caso il server web non invia nulla. Solo giri. Configuro il metodo di richiesta per aggiungere il timeout. Grazie – Jordan

+0

Appena controllato. È già configurato per il timeout. – Jordan

+0

Se vuoi provare un'alternativa a NSURLStuff, un mio amico ha raccomandato ASIHTTPRequest (google it) che è gratuito e sembra piuttosto amichevole, inclusa la funzionalità di timeout. – Tyler

24

Modifica: Questa risposta è ora obsoleta, ma alla data della risposta era accurata.

So che questa discussione è obsoleta, ma ho riscontrato anche questo problema. Questo è accaduto quando si testava l'app al di fuori della rete interna in cui vivevano i servizi. Il servizio finirà per scadere, ma Apple impone un periodo di 240 secondi (4 minuti) prima che si verifichi il timeout. Dai un'occhiata a questa discussione per maggiori informazioni sull'argomento.

NSMutableURLRequest not obeying my timeoutInterval

+0

Credo di averlo risolto aggiungendo NSCredentials alla mia Applicazione. La non reattività era dovuta al server che richiedeva l'autenticazione, cosa che non stavo fornendo. – Jordan

+3

Questa è un'informazione sbagliata! Secondo http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/Reference/Reference.html%23//apple_ref/occ/cl/NSURLRequest, l'intervallo di timeout predefinito è 60 secondi. – stigi

+4

@stigi sembra che tu stia referenziato materiale per Mac OS mentre ezekielDFM sta parlando di iOS. – leukosaima