1. ホーム
  2. objective-c

[解決済み] objective-cでNSURLの一部を取得する

2022-09-16 18:09:44

質問

NSStringで、値が

http://digg.com/news/business/24hr

どうしたら3段目まで全部取れるんですか?

http://digg.com/news/

どのように解決するのですか?

これは正確には第三階層ではありません。URLはそのように分割されます。

  • プロトコルまたはスキーム (ここでは http )
  • :// デリミタ
  • ユーザー名とパスワード (ここではありませんが、おそらく username:password@hostname )
  • はホスト名(ここでは。 digg.com )
  • ポート(これは :80 になります)
  • のパス(ここでは /news/business/24hr )
  • パラメータ文字列(セミコロンに続くもの)。
  • クエリ文字列 (以下のような GET パラメータがあった場合) ?foo=bar&baz=frob )
  • フラグメント(リンクの中にアンカーがある場合、例えば #foobar ).

完全な機能を備えたURLは次のようになります。

http://foobar:[email protected]:8080/some/path/file.html;params-here?foo=bar#baz

NSURL には様々なアクセッサがあります。のドキュメントで確認できます。 NSURL クラス、セクション URLのパーツにアクセスする . クイックリファレンス用です。

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (URLの // から末尾までのすべて)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicate
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @["/", "some", "path", "file.html"] (最初の / が一部であることに注意してください)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-here
  • -[NSURL query] = foo=bar
  • -[NSURL fragment] = baz

欲しくなるのは、こんな感じですが。

NSURL* url = [NSURL URLWithString:@"http://digg.com/news/business/24hr"];
NSString* reducedUrl = [NSString stringWithFormat:
    @"%@://%@/%@",
    url.scheme,
    url.host,
    url.pathComponents[1]];

この例の URL では、プロトコル、ホスト、そして最初のパスコンポーネントが必要なようです。(で返される配列のインデックス 0 の要素です。 -[NSString pathComponents] が返す配列のインデックス 0 の要素は単に "/" ですので、インデックス 1 の要素が必要になります。他のスラッシュは破棄されます)。