检查是否有效网址,以便我可以将其传递给NSURL?

时间:2010-03-01 19:09:02

标签: objective-c nsstring nsurl

我想检查NSString是否是有效的网址,以便我可以将其解析为NSURL变量...是否有一种简单的方法可以执行此操作? :)

CRASH 出于某种原因,应用程序在检查时崩溃了.....

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

控制台给我这个错误.....

  

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSURL initWithString:relativeToURL:]:nil string parameter'   2010-03-01 19:24:14.797 Snippety [8289:5e3b]筹码:(       8307803,       2419510843,       8391739,       8391578,       2898550,       3152497,       12262,       12183,       27646,       2662269,       2661144,       2454790485,       2454790162   )

3 个答案:

答案 0 :(得分:12)

编辑:以下答案不正确。 (Apple文档:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/index.html


如果传递的网址无效,则

NSURL的{​​{1}}会返回URLWithString。因此,您只需检查返回值即可确定URL是否有效。

示例:

nil

答案 1 :(得分:7)

我使用以下方法检查NSString testString是否是有效的URL:

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

scheme 测试网址的前缀,例如http://,https://或ftp://

主机测试网址,例如google.com或images.google.com

注意:这仍然会给你一些误报,例如:检查http://google,com时(注意逗号)将返回有效,但它确实比仅检查NSURL是否为零([NSURL urlWithString:@"banana"]不为零)更精确。

答案 2 :(得分:0)

这基本上就是+[NSURLConnection canHandleRequest:]方法的作用。此方法对NSURLRequest运行预检检查,以确保该请求是可解决的。要快速检查特定的URL,可以执行以下操作:

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