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];
Teraz też zmagam się z tym problemem. Znalazłeś już rozwiązanie? – Leon
Skomentowałem linię 227: // NSParameterAssert (url); I działa. – arlg
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. –