在Objective-C中获取NSURL的一部分


114

我有一个NSString的值为

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

在第3级之前我如何获得所有东西?

http://digg.com/news/

Answers:


435

请注意,这并不是第三个级别。像这样分割URL:

  • 协议或方案(此处为http
  • ://分隔符
  • 用户名和密码(这里没有,但可以是username:password@hostname
  • 主机名(此处为digg.com
  • 端口(例如,:80在域名之后)
  • 路径(此处为/news/business/24hr
  • 参数字符串(分号后的任何内容)
  • 查询字符串(如果您有GET参数,例如?foo=bar&baz=frob
  • 片段(如果您在链接中有锚点,那将是这样#foobar)。

“功能齐全”的URL如下所示:

http://foobar:nicate@example.com:8080/some/path/file.html;params-here?foo=bar#baz

NSURL有各种各样的访问器。您可以在NSURL类的文档中“ 访问URL的各个部分”中检查它们。快速参考:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] =(从//到URL末尾的所有内容)
  • -[NSURL user] = foobar
  • -[NSURL password] =尼卡特
  • -[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] =参数-在这里
  • -[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]只是“ /”,因此您需要索引1处的元素。其他斜杠将被丢弃。)


9
对于阅读本文的任何人:您需要获取[url.pathComponents objectAtIndex:1]而不是index 0,因为斜杠实际上是数组的元素,从而导致此答案中的代码输出http://digg.com//
Dima

@Dima,好抓。但是,只有第一个斜杠被认为是路径分量,其他斜杠被丢弃。我不知道为什么。
zneak 2012年

也很不错!我什至没有检查它。
迪马2012年

我们是否在项目符号点列表中缺少文件名?在此示例中,file.html项目符号中未列出该符号-我看到我们正在从路径跳转到查询字符串...
Brett 2012年

2
digg.com?这篇文章几岁了!;-)
不推荐使用的达伦(Darren)

7

使用Playground,语言迅速,我明白了! Playground提供了一种互动方式来查看实际情况。我希望您能喜欢这样做,这是一种有趣的学习NSURL的有趣方式,它是iOS中的重要主题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.