加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – NSURL baseURL返回nil.任何其他方法来获取实际的

发布时间:2020-12-16 03:14:36 所属栏目:百科 来源:网络整理
导读:我觉得我不明白“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 docs我读到:
我觉得我不明白“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 docs我读到:

Return Value
The base URL of the receiver. If the receiver is an absolute URL,returns 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的目的是什么?

解决方法

-baseURL是一个纯粹是NSURL / CFURL的概念,而不是一般的URL.如果你这样做:
[NSURL URLWithString:@"search?q=uiviewcontroller"
       relativeToURL:[NSURL URLWithString:@"https://www.google.es/"]];

那么baseURL将是https://www.google.es/.简而言之,只有使用显式传递给基本URL的方法创建NSURL,才会填充baseURL.此功能的主要目的是处理相对URL字符串,例如可能在典型网页的源代码中找到.

你所依赖的是使用任意的URL并将其重新分配到主机部分.我认识的最简单的方法是有点狡猾:

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

这将提供一个https://www.google.es/的hostURL

我有这样的方法发布为 – [NSURL ks_hostURL]作为KSFileUtilities的一部分(向下滚动自述文件找到它记录)

如果你想要纯粹的主机,而不是任何像计划/端口等,那么 – [NSURL主机]是你的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读