2014-04-23 21 views
8

Nasza aplikacja ma wiele widoków sieciowych i ostatnio dodałem NSURLProtocol do przechwytywania niektórych żądań od nich.NSURLProtocol canInitWithRequest: wywoływana wiele razy

Zauważyłem, że niektóre widoki sieci wywołują wielokrotnie metodę + [NSURLPRotocol canInitWithRequest:] z tym, co wydaje się być dokładnie tym samym żądaniem. Czasami 6 lub 7 razy. Próbuję zrozumieć, dlaczego to może się zdarzyć.

Czy ktoś ma z tym jakieś doświadczenie? Wylogowałem wartości [NSURL absoluteString] i httpMethod i są one takie same dla każdego żądania. Spodziewam się, że ta metoda zostanie wywołana tylko raz dla dowolnego pliku lub zasobu potrzebnego z serwera, a nie wiele razy. Wygląda na to, że różni się w zależności od strony internetowej.

jakieś pomysły?

Odpowiedz

4

Nie jestem ekspertem, ale AFAIK to normalne zachowanie. [NSURLPRotocol canInitWithRequest:] może być wywołany wiele razy dla tego samego żądania. Jeśli chcesz otrzymać powiadomienie tylko raz na każde żądanie, powinieneś go przechwycić w metodzie -startLoading. Ten samouczek okazał się pomocny przy konstruowaniu prostej podklasy NSURLProtocol, która zrobi właśnie to: http://www.raywenderlich.com/59982/nsurlprotocol-tutorial

+0

z jakiegoś powodu startLoading jest wywoływany tylko po problemie opisanym przez drekka. nawet jeśli zwrócę TAK startLoading wywołany po wywołaniu wszystkich żądań canInitWithRequest. Czy masz pojęcie, dlaczego? dziękuję! – ElizaS

+0

Jedyna wskazówka, jaką mogę podać to: Upewnij się, że nie rozpoczynasz połączenia, które już się rozpoczęło - szczególnie jeśli używasz NSURLConnection, gdzie niektóre metody alokacji automatycznie nawiązują połączenie. – dgatwood