2013-09-16 12 views
15

Ja tylko starałem AFNetworking na ios7 i dostaję ten błąd:AFNetworking - Nieprawidłowy parametr nie satysfakcjonujące: url

/Classes/AFHTTPClient.m:227 
2013-09-16 18:25:57.557 App[13531:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: url 

Nie wiem co się dzieje, czy jest to problem z lib się ios7? dzięki.

+1

Teraz też zmagam się z tym problemem. Znalazłeś już rozwiązanie? – Leon

+0

Skomentowałem linię 227: // NSParameterAssert (url); I działa. – arlg

+2

Pomoże to, jeśli włączysz kod, w którym program się zawiesza. Powinieneś jednak sprawdzić, czy podajesz zero w parametrze URL, takim jak: [[AFHTTPClient alloc] initWithBaseURL: nil] '. NSParameterAssert (url) jest tam, aby zapobiec inicjalizacji klienta HTTP z zerowym adresem URL. –

Odpowiedz

23

Jak mówi Leon w swoim komentarzu, komentowanie NSParameterAssert nie jest idealnym rozwiązaniem. Twierdzenie zostało podane tam z jakiegoś powodu przez autora AFNetworking. Kod nieprzekazujący potwierdzenia jest prawdopodobnie spowodowany nieprawidłowym adresem URL.

Należy pamiętać, że metody fabryczne NSURL (tj. + URLWithString: i ich rodzeństwo) zwrócą nil po przekazaniu nieprawidłowego ciągu adresu URL. W tym kontekście niepoprawny ciąg jest łańcuchem zawierającym nieprawidłowy adres URL.

Zamiast komentować nasze twierdzenie, powinieneś upewnić się, że nie przekazujesz nieprawidłowego adresu URL do instancji AFHTTPClient. This Stackoverflow answers podaje przykład, w jaki sposób można zweryfikować adres URL. Oto próbka z odpowiedzią:

- (BOOL)validateUrl:(NSString *)candidate { 
    NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; 
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate]; 
} 

Alternatywnie, można dodać ucieczek procentowe pomocą NSString „s stringByAddingPercentEscapesUsingEncoding metody. Tak:

NSString *encoded = [notEncoded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
+0

Wiem, że nie było to idealne rozwiązanie, ale potrzebowałem szybkiej naprawy. Nie mogę teraz wypróbować twojej odpowiedzi, ponieważ nie pracuję już nad projektem. W każdym razie, dzięki za odpowiedź, spróbuję, kiedy znów będę pracował nad projektem :). – arlg

+0

Cieszę się, że mogę pomóc :-) –

+0

zmienić kodowanie mi pomóc. dzięki –

4

prostu miałem ten błąd, przyczyna była przestrzeń na początku url:

http://host.com/etc 
^ 
0

miałem dzisiaj dziwny przypadek z tego dochodzić. Mój problem polegał na tym, że skopiowałem adres URL z innego edytora tekstu (Sublime), dlatego adres URL był nieprawidłowy.

Nie wierzyłem, dopóki nie przetestowałem tego kilka razy.

0

Nadzieja jego pracy .. W AFnetworing nazwa klasy AFURLRequestSerialization.m

commented the line 227 : // NSParameterAssert(url); 
0

jako Kasper odpowiedź możesz „można dodać ucieczek procentowe stosując metodę stringByAddingPercentEscapesUsingEncoding NSString za”

lub lepiej użyć następujących od to przestarzałe w ios 9

path = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 
Powiązane problemy