【问题标题】:URL host name returns nullURL 主机名返回 null
【发布时间】:2012-10-29 22:03:29
【问题描述】:

我需要获取字符串 url 的主机名

我正在尝试从字符串创建 NSURL 对象,然后使用 NSURL 的主机属性来获取主机名。但主机名始终为空。

NSURL *url = [NSURL URLWithString: @"www.google.com"];
NSLog(@"Host name %@", url.host);

但主机名始终为空。 谁能解释一下为什么主机名为空?

编辑:很抱歉有一个错字,我在提问时错过了引号和逗号。但是问题还是一样。

【问题讨论】:

  • 你的 NSLog 中也漏掉了一个逗号
  • 问题是 URL 中缺少 http:// - 请参阅下面的答案。

标签: iphone objective-c ios


【解决方案1】:

根据Apple documentation,

- (NSString *)host;

返回值:

URL 的主机。如果接收方不符合RFC 1808, 返回零

所以如果它不符合RFC 1808,它将返回nil。根据RFC 1808的定义,

正确的语法如下:

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

所以你需要在形成NSURL的同时添加http://。

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSLog(@"Host name %@", url.host);

【讨论】:

  • 是的,我想我忽略了它。我的印象是,如果 url 对象不是 nil 使用没有方案的字符串,主机名也不应该是 nil。
【解决方案2】:

看起来您在 www.google.com 之后缺少一个 "?请尝试添加它。

NSURL *url = [NSURL URLWithString: @"www.google.com"];
NSLog(@"Host name %@", url.host);                  ^
                     ^

(注意第二行我还加了一个逗号,我尽量用^指向它)

编辑:啊,好吧,那么它可能是第二行的逗号。

【讨论】:

  • 也看看@ACB 说了什么,这可能是你的主要问题,无论如何他都是对的。
【解决方案3】:

如果你这样做会更好(添加 http://):

NSURL *url = [NSURL URLWithString: @"http://www.google.com"];
NSLog(@"Host name %@", url.host);

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2013-12-31
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多