iPhone SDK: Проверить правильность URL-адресов, если NSURL не работает? - PullRequest
1 голос
/ 20 марта 2011

Я пытаюсь проверить, является ли данный URL действительным, и я делаю это так:

- (BOOL)urlIsValid:(NSString *)address {
    NSURL *testURL = [NSURL URLWithString:address];
    if (testURL == nil) {
        return NO;
    }
    else {
        return YES;
    }
}

Так как «URLWithString» должен возвращать «ноль», если URL-адрес искажендумал, что это будет работать, но это не по какой-то причине.Может кто-нибудь сказать, пожалуйста, почему?Заранее спасибо!

Ответы [ 5 ]

17 голосов
/ 30 ноября 2012
NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"yourstring"]];
bool valid = [NSURLConnection canHandleRequest:req];
5 голосов
/ 09 января 2013

проверьте, что этот метод отлично работает для меня

3 голосов
/ 20 марта 2011

Я думаю, что вы можете быть озадачены определением «уродливый».Все, что соответствует RFC 2396 , считается действительным;на практике кажется, что NSURL также примет [ и ] несмотря на то, что они не разрешены RFC.

Это означает, что практически любая строка печатных символов ASCII, кроме пробела, ", % если за ними не следуют две шестнадцатеричные цифры, <, >, \, ^, `, {, | и } будут считаться «действительными», хотяне может быть абсолютным или вообще полезным.Строки, содержащие несколько #, также могут быть отклонены.

0 голосов
/ 20 марта 2011

По моему опыту, процедуры создания NSURL обычно выдают исключение вместо возврата nil. Тем не менее, реальный вопрос в этом случае заключается в том, что представляет собой неправильно сформированный URL? Вы проверяете, существует ли ресурс, или проверяете, соответствует ли структура строки соответствующим RFC?

Что касается первой упомянутой мной проблемы, то при создании URL-адресов, которые я сам не ввожу, я обычно делаю это:

@try
{
    NSURL * url = [NSURL URLWithString: theString];
    // use the URL
}
@catch (NSException * e)
{
    NSLog( @"URL creation error? %@ - %@", [e name], [e reason] );
    @throw;  // throw the exception again, to hopefully get your attention
}
0 голосов
/ 20 марта 2011

Нет хорошего объяснения этому, код, который вы предоставили, выглядит отлично и должен работать для цели, которую вы объясняете.

Под неверно сформированными URL-адресами подразумевается ли URL-адрес, приводящий к ошибке 404, или URL-адреса с неверным форматированием или символами?

Приведите пример неверно сформированного URL, который возвращает yes в этой функции.

...