AFNetworking - Недопустимый параметр: url

Я просто попробовал AFNetworking на ios7, и я получаю эту ошибку:

    /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

Я не знаю, что происходит, есть ли проблема с lib ios7? спасибо.

Ответы

Ответ 1

Как говорит Леон в своем комментарии, комментирование NSParameterAssert не является идеальным решением. Утверждение было поставлено по этой причине автором AFNetworking. Код, не передающий утверждение, скорее всего, будет вызван неправильным URL.

Помните, что методы NSURL factory (т.е. + URLWithString: и его братья и сестры) возвращают nil, когда им передается некорректная строка URL. В этом контексте недопустимая строка представляет собой строку, содержащую недопустимый URL.

Что вы должны сделать, а не комментировать наше утверждение, убедитесь, что вы не передаете какой-либо недопустимый URL-адрес вашему экземпляру AFHTTPClient. fooobar.com/questions/71118/... дает пример того, как вы можете проверить URL-адрес. Вот образец ответа:

- (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];
}

В качестве альтернативы вы можете добавить процентные экраны с помощью метода NSString stringByAddingPercentEscapesUsingEncoding. Вот так:

NSString *encoded = [notEncoded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Ответ 2

У меня просто была эта ошибка, причиной было место в начале URL-адреса:

 http://host.com/etc
^

Ответ 3

Сегодня у меня был странный случай с этим утверждением. Моя проблема заключалась в том, что я скопировал url из другого текстового редактора (Sublime) и почему URL недействителен.

Я не верил, пока не проверил его несколько раз.

Ответ 4

Надеюсь, что это будет работать. В AFNetworing имя класса AFURLRequestSerialization.m

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

Ответ 5

как ответ Каспера вы можете "добавить процентные экраны с помощью метода NSString stringByAddingPercentEscapesUsingEncoding"

или лучше использовать следующее, поскольку оно устарело в ios 9

path = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];