Patrzyłem na klasę NSURLConnection
, która może być użyta do ustanowienia połączenia synchronicznego lub asynchronicznego z adresem URL, a następnie pobrania jego danych ... wiele zmian zostało dokonanych w tej klasie z IOS 5 i ja widziałem, że wprowadzili pewne formalne protokoły związane z uwierzytelnianiem lub pobieraniem, ale nie widzę na przykład, czy wiadomość connection:didReceiveResponse:
(która została wcześniej wysłana do delegata i że nie jest już dostępna) dostępne w niektórych protokołach. Jak zaimplementować połączenie asynchroniczne i pobrać nagłówki HTTP, gdy tylko otrzyma odpowiedź? Jestem pewien, że jest lepszy sposób niż używanie NSURLConnection
wraz z komunikatem connection:didReceiveResponse:
. Metody takie jak stringWithContentsOfURL
zawsze ładują zawartość synchronicznie? Co używasz do implementacji asynchronicznych plików do pobrania w swoich aplikacjach, unikając przestarzałych metod i reagując na takie zdarzenia, jak _http response received_m etc? Czy w miarę możliwości uruchamiasz synchroniczne pobieranie w tle zadań?Metody NSURLConnection nie są już dostępne w IOS5
Odpowiedz
NSURLConnectionDelegate
stała się oficjalnym protokołem (był to nieformalny protokół w poprzednich wersjach). W tym protokole, następujące (nie odrzucono) metody uznane są:
connection:didFailWithError:
connectionShouldUseCredentialStorage:
connection:willSendRequestForAuthenticationChallenge:
Ponadto, istnieją dwa subprotocols zgodnych z NSURLConnectionDelegate
:
NSURLConnectionDataDelegate
jest używany dla delegatów, którzy ładują dane do pamięci i deklaruje następujące meto DS, z których niektóre Jestem pewien, że znajdziesz znajomy:
connection:willSendRequest:redirectResponse:
connection:didReceiveResponse:
connection:didReceiveData:
connection:needNewBodyStream:
connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
connection:willCacheResponse:
connectionDidFinishLoading:
NSURLConnectionDownloadDelegate
służy do delegatów, które przechowują dane bezpośrednio do pliku na dysku, i deklaruje następujące metody:
connection:didWriteData:totalBytesWritten:expectedTotalBytes:
connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
connectionDidFinishDownloading:destinationURL:
Jak widać , nadal możesz używać swoich poprzednich delegatów, prawdopodobnie z niewielkimi modyfikacjami.
Aby uzyskać więcej informacji, zobacz iOS 4.3 to iOS 5.0 API Differences document i NSURLConnection.h w lokalnej instalacji Xcode. Po wydaniu nowej wersji SDK dokumentacja w plikach nagłówkowych jest często bardziej wiarygodna niż dokumentacja dostępna w bibliotece programisty. Trzeba trochę czasu, aby ten ostatni był aktualny.
Dziękuję ... Właśnie zauważyłem, że dokumenty referencyjne nie zostały jeszcze zaktualizowane, więc dokument różnicowy API i plik nagłówkowy to dobry punkt wyjścia .. Myślałem, że widziałem gdzieś (nie mogę go teraz znaleźć ..), którzy mówią, że zazwyczaj twoje aplikacje nie powinny implementować protokołu NSURLConnectionDataDelegate ... powiedz mi, czy się mylę: jeśli chcesz zaimplementować pasek postępu pobierania, czy nie powinieneś użyć metody didReceiveData, aby zrozumieć kiedy " pobrałem trochę danych lub czy źle zrozumiałem, jak działa iReceiveData i kiedy jest wysyłane? –
@Gianni Tak, '- ... didReceiveData:' jest wysyłane do delegata, aby powiadomić, że dane zostały odebrane. Oprócz przechowywania tych danych, możesz użyć go do aktualizacji paska postępu pobierania. –
FYI, od 04/08/12, dokumentacja SDK 5.1 nadal nie ma kompletnego odwołania do NSURLConnectionDataDelegate (ani online, ani w SDK). –
Właśnie napotkałem ten sam problem. Wygląda na to, że wysłanie żądania asynchronicznego jest bardziej uproszczone dzięki blokom i NSOperationQueue
.
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
Oznacza to, że uczestnik jest teraz używany tylko do uwierzytelniania i problemów z awariami.
Dziękuję, nie mogłem znaleźć tego w dokumentach referencyjnych, może wkrótce zostanie zaktualizowany. –
Normalnie jest teraz zaktualizowany. Uważaj jednak, ponieważ ta metoda nie jest dostępna w systemie iOS 4.3. Podsumowując: będziesz musiał wdrożyć oba sposoby, aby być kompatybilnym z iOS 4.3 i iOS 5.0. –
Nawet ja nie miałaś znaleźć w dokumentacji na stronie internetowej firmy Apple
To powinna być dostępna tutaj
NIE! NIE są ograniczone do użycia w celu uwierzytelnienia i problemów z błędami, jeśli przejrzysz uważnie bibliotekę Apple.
Od wprowadzenia +(void)sendAsynchronousRequest:queue:completionHandler:
do NSConnection klasy obiektu, wiele rzeczy, które mogą wykonywać jak najwięcej NSConnectionDelegate
sposób jak poprzednio mogą być teraz używane w protokołach formalnych zwany „NSConnectionDataDelegate
” & NSConnectionDownloadDelegate
, otwierając nowy pokój, aby dodać więcej funkcji do NSURLConnection
metod. (od iOS5)
Uważam, że jest to poprawa, nie ograniczająca ich użycia.
- 1. Negatywne testy w piaskownicy PayPal nie są już dostępne?
- 2. MKAnawacje nie są wybierane w iOS5
- 3. Czy wbudowane metody Pythona są dostępne w alternatywnej przestrzeni nazw?
- 4. Jakie jest dokładne użycie pakietu java nio, gdy już dostępne są metody z pakietem io
- 5. NSOperationQueue nie działa w IOS5
- 6. Czcionki TTF nie są dostępne w Intellij
- 7. Dlaczego prywatne metody pomocnicze są nadal dostępne w widokach?
- 8. NSURLConnection rozpoczęto w innym wątku. Metody pełnomocnik nie nazywa
- 9. Czy polecenia raw są dostępne w StackExchange.Redis?
- 10. net.schmizz.sshj.userauth.UserAuthException: Wyczerpane dostępne metody uwierzytelniania
- 11. Dlaczego właściwości statyczne nie są dostępne przez "->", ale są dostępne przez "::"?
- 12. Inne wdrożenia SecurityManager są dostępne?
- 13. Czy w CSS dostępne są komentarze wielowierszowe?
- 14. Zmienne modułowe Fortran nie są dostępne w debuggerach
- 15. Skrypty JavaScript w języku angielskim, jeśli nie są dostępne.
- 16. "Konstruktor testów kodowanych UI" Krzyżyki nie są dostępne w IE
- 17. coffeescript klasy nie są dostępne w głównej javascript
- 18. Jakie operatory matematyczne są dostępne w metaprogramowaniu
- 19. Metody WebView nie są wywoływane w Androidzie
- 20. Jakie czcionki są dostępne w systemie Android?
- 21. Jak przesłać obiekt danych JSON do serwera w systemie iOS5?
- 22. Czy są dostępne jakieś godne alternatywy CSLA?
- 23. Czy metody WMI Win32_Processor i Win32_NetworkAdapterConfiguration są dostępne w systemie Windows 8?
- 24. Metody delegatów SKProductsRequest nigdy nie są nazywane
- 25. Jakie narzędzia są dostępne dla refaktoryzacji Ruby?
- 26. nsjsonserializacja w ios5?
- 27. Co to są alternatywy dla NSURLConnection dla kodowania transferu kodowanego?
- 28. MGTwitterEngine katastrofy w iOS5
- 29. Chcę wiedzieć, jakie funkcje są dostępne z pliku Win32.DLL
- 30. RegexKitLite w IOS5
Twoje pytanie powinno zostać podzielone na kilka pytań: w pytaniu jest pięć pytań. Moja odpowiedź dotyczy tego, co uważam za największy problem, a mianowicie pozornego usuwania metod delegowania połączeń, które były dostępne w iOS 4.3. –