Domanda

Stavo guardando la classe NSURLConnection che potrebbe essere utilizzato per stabilire una connessione di sincronizzazione o asincrona a un URL e quindi recuperare i suoi dati ... un sacco di cambiamenti sono stati fatti per questa classe con IOS 5 e ho visto hanno introdotto alcuni protocolli formali relativi alla autenticazione o il download, ma non vedo, per esempio, se il messaggio connection:didReceiveResponse: (che è stato precedentemente inviato al delegato e che non è più disponibile è) è ancora disponibile in alcuni protocolli .. Come è possibile realizzare una connessione asincrona e recuperare, per esempio, le intestazioni HTTP non appena ricevuto la risposta? Sono sicuro che ci sia un modo migliore di utilizzare NSURLConnection insieme al messaggio connection:didReceiveResponse: .. metodi come stringWithContentsOfURL faccio sempre caricare il contenuto in modo sincrono? Che cosa si usa per implementare asincrona download in tue applicazioni evitando metodi deprecati e reagire agli eventi, come _http risposta received_m ecc? Ti avvia download sincroni in attività in background, se possibile?

È stato utile?

Soluzione

NSURLConnectionDelegate è diventato un protocollo formale (si trattava di un protocollo informale nelle versioni precedenti). In questo protocollo, i seguenti metodi (non deprecati) sono dichiarati:

  • connection:didFailWithError:
  • connectionShouldUseCredentialStorage:
  • connection:willSendRequestForAuthenticationChallenge:

Inoltre, ci sono due subprotocols conformi alle NSURLConnectionDelegate:

NSURLConnectionDataDelegate viene utilizzato per i delegati che caricare i dati alla memoria, e dichiara i seguenti metodi, alcuni dei quali sono sicuro che troverete familiare:

  • connection:willSendRequest:redirectResponse:
  • connection:didReceiveResponse:
  • connection:didReceiveData:
  • connection:needNewBodyStream:
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
  • connection:willCacheResponse:
  • connectionDidFinishLoading:

NSURLConnectionDownloadDelegate viene utilizzato per i delegati che memorizzano i dati direttamente in un file su disco, e dichiara i seguenti metodi:

  • connection:didWriteData:totalBytesWritten:expectedTotalBytes:
  • connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
  • connectionDidFinishDownloading:destinationURL:

Come si può vedere, è comunque possibile utilizzare i vostri delegati precedenti, possibilmente con qualche piccola modifica.

Per ulteriori informazioni, vedere la iOS 4.3 a iOS 5.0 API Differenze documento NSURLConnection.h nella propria installazione Xcode locale. Quando una nuova versione SDK viene rilasciato, non è raro per la documentazione all'interno dei file di intestazione di essere più affidabile rispetto alla documentazione disponibile sulla libreria sviluppatore. Ci vuole un po 'per questi ultimi di essere up-to-date.

Altri suggerimenti

Ho appena incontrato questo stesso problema. Looks come l'invio di una richiesta asincrona è più semplificata con blocchi e NSOperationQueue.

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

Ciò significa che il delegato è ora utilizzato solo per problemi di autenticazione e di fallimento.

NO! Essi non si limitano a utilizzare per problemi di autenticazione e di fallimento se si guarda attentamente attraverso la biblioteca di Apple.

Dal momento che l'introduzione di +(void)sendAsynchronousRequest:queue:completionHandler: a oggetto di classe connessione NSConnection, molte cose che possono eseguire un numero metodo NSConnectionDelegate come prima possono ora essere utilizzati in protocolli formali chiamato "NSConnectionDataDelegate" & NSConnectionDownloadDelegate, l'apertura di un nuovo spazio per aggiungere ulteriori funzionalità per metodi NSURLConnection. (Da iOS5 on)

Quindi penso che è un miglioramento, non limitando il loro utilizzo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top