2014-09-12 15 views
5

Pracuję nad aplikacją wykorzystującą komunikację klient-serwer. Wszystko działało dobrze, aż system iOS 7.1. Po uruchomieniu Xcode 6 GM Seed próbowałem zbudować i uruchomić projekt na symulatorze iOS8. Jednak wszystkie połączenia NSURLC wydają się wygasać. Nie mogę uzyskać żadnej odpowiedzi z serwera. Działa to na symulatorze iOS 7 i Xcode 6.
Próbowałem użyć NSURLSession mając nadzieję, że to rozwiąże problem. Ale to nie zaszkodziło.
Każda pomoc będzie bardzo ceniona !! Jeśli ktokolwiek napotkał ten problem, daj mi znać, jeśli masz do tego obejście.Limit czasu połączenia NSURLConnection w systemie iOS8

UPDATE:
Jest to kod użyłem:

NSString *authStr = [NSString stringWithFormat:@"%@:%@", username, password]; 
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]]; 
[inURLRequest setValue:authValue forHTTPHeaderField:@"Authorization"]; 

Należy pamiętać, że inURLRequest już iniatlized z żądanym adresem URL.
Po tym wystarczy użyć inURLRequest, aby wystrzelić transakcję w zwykły sposób. Na przykład, w przypadku NSURLSession, utwórz zadanie pobierania za pomocą tego obiektu żądania i wywołaj na nim CV API.

Odpowiedz

1

Cóż, znalazłem rozwiązanie tego problemu .
Aplikacja miała podstawowe uwierzytelnianie w miejscu dla każdego serwisu internetowego REST. Oznacza to, że otrzymaliśmy wyzwanie uwierzytelnienia dla każdej usługi internetowej, do której wysłaliśmy dane uwierzytelniające wraz z wyzwaniem. Zmieniłem to, aby wysłać poświadczenia w nagłówku żądania (w formacie zaszyfrowanym) jako pole nagłówka.

Nie jestem pewien, jak to działa w systemie iOS 7, a nie w systemie iOS 8. Wydaje się, że to naprawiło mój problem :).

+0

Czy możesz podać mi kod z wyjaśnieniem? –

+1

Proszę zobaczyć aktualizację w pytaniu. Co do wyjaśnienia, domyślam się, że idealny sposób obsługi uwierzytelniania BASIC jest jedyny. Jednak we wcześniejszej wersji iOS NSURLConnection pozwalał również na uwierzytelnianie BASIC w wyzwaniu. Nie jest to już obsługiwane, a więc i ten kod. –

+0

@SahityaTarumani W moich testach podstawowa autoryzacja działa dobrze w iOS 8.1/8.2, jeśli żądanie może zostać uruchomione natychmiast, ale jeśli połączenie musi czekać na innych, aby ukończyć jako pierwsze, to manifestuje ten nowy błąd iOS 8. – Rob

0

Jeśli przesyłasz strumieniowo dane do NSURLConnection, upewnij się, że masz write nowe dane dokładnie raz, gdy wystąpiło zdarzenie streamoweSpaceAvail - Stwierdziłem, że miałem problemy z połączeniem, gdy miałem błędną obsługę zdarzenia hasSpaceAvail.

nie write więcej niż raz w odpowiedzi na zdarzenie

zrobić nie write zerowy razy (albo nie dostaniesz kolejną imprezę hasSpaceAvail)

Powiązane problemy