12

「baseURL」の概念を理解していないと思います。これ:

NSLog(@"BASE URL: %@ %@", [NSURL URLWithString:@"http://www.google.es"], [[NSURL URLWithString:@"http://www.google.es"] baseURL]);

これを印刷します:

BASE URL: http://www.google.es (null)

そしてもちろん、Appleのドキュメントで私はこれを読みました:

戻り値 受信者のベース URL。受信者が絶対 URL の場合は、nil を返します。

この例の URL から取得したいと思います。

https://www.google.es/search?q=uiviewcontroller&aq=f&oq=uiviewcontroller&sourceid=chrome&ie=UTF-8

このベース URL

https://www.google.es

私の質問は簡単です。スキームとホスト名を連結せずに実際のベース URL を取得するよりクリーンな方法はありますか? つまり、ベース URL の目的は何ですか?

4

5 に答える 5

31

-baseURLNSURL/CFURL一般的な URL ではなく、純粋に概念です。これを行った場合:

[NSURL URLWithString:@"search?q=uiviewcontroller"
       relativeToURL:[NSURL URLWithString:@"https://www.google.es/"]];

それならbaseURLそうでしょうhttps://www.google.es/。つまり、ベース URL を明示的に渡すメソッドを使用しbaseURLて が作成された場合にのみ、 が読み込まれます。NSURLこの機能の主な目的は、典型的な Web ページのソースに見られるような相対 URL 文字列を処理することです。

代わりに、任意の URL を取り、それをホスト部分だけに戻すことを求めています。これを行う最も簡単な方法は、少し狡猾です。

NSURL *aURL =  [NSURL URLWithString:@"https://www.google.es/search?q=uiviewcontroller"];
NSURL *hostURL = [[NSURL URLWithString:@"/" relativeToURL:aURL] absoluteURL];

これhostURLにより、https://www.google.es/

KSFileUtilities-[NSURL ks_hostURL]の一部としてそのようなメソッドを公開しています (ドキュメントを見つけるには、readme を下にスクロールします)

スキーム/ポートなどではなく、純粋にホストが必要な場合は、それ-[NSURL host]があなたの方法です。

于 2013-04-09T09:14:25.367 に答える
3

BaseURL のドキュメント。

baseURL
Returns the base URL of the receiver.

- (NSURL *)baseURL
Return Value
The base URL of the receiver. If the receiver is an absolute URL, returns nil.

Availability
Available in iOS 2.0 and later.
Declared In
NSURL.h

相対 URL でのみ機能するようです。

あなたはおそらく使用することができます...

NSArray *pathComponents = [url pathComponents]

次に、必要なビットを取ります。

または試してみてください...

NSString *host = [url host];
于 2013-04-09T07:40:25.087 に答える