【问题标题】:Check if valid url so i can pass it to an NSURL?检查是否有效的网址,以便我可以将其传递给 NSURL?
【发布时间】:2011-01-22 10:26:02
【问题描述】:

我想检查 NSString 是否是有效的 URL,以便我可以将其解析为 NSURL 变量...有没有简单的方法可以做到这一点? :)

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

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 )

【问题讨论】:

    标签: objective-c nsstring nsurl


    【解决方案1】:

    我正在使用下面的方法来检查 NSString testString 是否是一个有效的 URL:

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

    scheme 测试 URL 的前缀,例如http://、https:// 或 ftp://

    host 测试 URL 的域,例如google.com 或 images.google.com

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

    【讨论】:

    • 还有一个 else 缺失
    【解决方案2】:

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


    如果传递的 URL 无效,NSURLURLWithString 将返回 nil。因此,您只需检查返回值即可确定 URL 是否有效。

    例子:

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

    【讨论】:

    • 由于某种原因,应用程序崩溃了.....如果 URL 有效,它可以工作,如果不是,它只会崩溃? 上面的代码
    • 试试 URLWithString 而不是 initWithString
    • NSURL 将很乐意处理除 nil 之外的任何字符串值。这是您唯一需要特殊情况的
    • 这是错误的。使用 URLWithString 时,任何字符串都将作为 url 传递。
    • 原来NSURLnil 字符串的处理最近发生了变化,因为 OS X 10.7 等的发布:mikeabdullah.net/urlwithstring-changed.html
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多