2012-10-29 103 views
6

我需要得到一個字符串的URLURL主機名返回null

我想從字符串的NSURL對象,然後使用NSURL的主機屬性來獲取主機名的主機名。但主機名稱始終爲空。

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

但是主機名總是空。 任何人都可以解釋爲什麼主機名爲空?

編輯:對不起,有一個錯字,我錯過了一個報價和一個逗號,而問這個問題。但問題仍然是一樣的。

+0

你也錯過了一個逗號在您的NSLog – Jasper

+0

的問題是缺少的http:// URL中的 - 看到我的回答如下。 – rmaddy

回答

7

Apple documentation

- (NSString *)host; 

返回值:

URL的主機。如果接收器不符合RFC 1808, 返回nil

所以,如果它不符合RFC 1808,它將返回零。由於每RFC 1808定義,

正確的語法如下:

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

所以你需要添加http://也同時形成NSURL

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

是的,我想我忽略了它。我在印象之下,如果url對象不是nil使用字符串沒有方案主機名也不應該是nil。 – codemaster

1

看起來你錯過了「之後訪問www.google.com嗎?嘗試在添加。

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

(第二行我還添加了一個逗號通知,我想它有指向^盡我所能)

編輯:嗯,好吧,那麼它可能是在隨後的第二行逗號

+1

也看看@ACB說了些什麼,那可能是你的主要問題,而且他是對的。 – Dustin

0

這將更好地工作,如果你(添加http://):

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