Проверьте, действителен ли URL-адрес, чтобы я мог передать его NSURL?

Я хочу проверить, является ли NSString допустимым URL-адресом, поэтому я могу разобрать его на переменную NSURL... есть ли простой способ сделать это?:)

CRASH По какой-то причине приложение падает при проверке.....

NSURL *shortURL = [[NSURL alloc] initWithString:data];
if(shortURL == nil)
{
    NSLog(@"INVALID");
}
else {
    NSLog(@"COOOL");
}

Консоль дает мне эту ошибку.....

* Завершение приложения из-за неотображенного исключения 'NSInvalidArgumentException', причина: '* - [NSURL initWithString: relativeToURL:]: параметр nil string' 2010-03-01 19: 24: 14.797 Snippety [8289: 5e3b] Стек: (     8307803,     2419510843,     8391739,     8391578,     2898550,     3152497,     12262,     12183,     27646,     2662269,     2661144,     2454790485,     2454790162 )

Ответ 1

Изменить: ниже ответ неверен. (Apple docs: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/index.html)


NSURL URLWithString возвращает nil, если указанный URL недействителен. Таким образом, вы можете просто проверить возвращаемое значение, чтобы определить, действительно ли URL.

Пример:

NSURL *url = [NSURL URLWithString:urlString];
if(url){ NSLog("valid"); }

Ответ 2

Я использую метод ниже, чтобы проверить, является ли NSString testString допустимым URL:

NSURL *testURL = [NSURL URLWithString:testString];
if (testURL && [testURL scheme] && [testURL host])
{
    NSLog(@"valid");
}
{
    NSLog(@"not valid");
}

схема проверяет префикс URL-адреса, например. http://, https://или ftp://

хост проверяет домен URL-адреса, например. google.com или images.google.com

Примечание. Это все равно даст вам некоторые ложные срабатывания, например. при проверке http://google,com (обратите внимание на запятую) вернет значение, но это определенно более точно, чем просто проверка того, является ли NSURL не нулем ([NSURL urlWithString:@"banana"] is не ноль).

Ответ 3

Это в основном то, что делает метод +[NSURLConnection canHandleRequest:]. Этот метод запускает предварительную проверку по NSURLRequest, чтобы убедиться, что запрос разрешим. Чтобы быстро проверить определенный URL, вы можете сделать это:

BOOL isValidURL = [NSURLConnection canHandleRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com"]];