当方案没有双斜杠时,无法获取NSURL组件

时间:2012-08-31 23:05:42

标签: url nsurl

我正在尝试使用NSURL类引用中提供的方法解析URL以获取方案,路径和参数。但是我注意到,如果我以这种方式构建url(在方案之后没有双斜杠):

NSString *urlString = @"customScheme:myPath?parameter=hello&other_parameter=12";
NSURL *url = [NSURL URLWithString:urlString];

我无法从NSURL中获取任何这些值。换句话说,方法

path
query

返回零。

如果我像这样添加双斜杠:

NSString *urlString = @"customScheme://myPath?parameter=hello&other_parameter=12";
NSURL *url = [NSURL URLWithString:urlString];
一切正常。为什么是这样?

谢谢!

2 个答案:

答案 0 :(得分:2)

Apple的文档中非常清楚地记录了这些方法:

  

path   返回符合RFC 1808的URL的路径。

     

- (NSString *)path

     

网址的路径,未使用stringByReplacingPercentEscapesUsingEncoding:方法转义。如果接收方不符合RFC 1808,则返回nil

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html

RFC 1808非常清楚构成有效相对URL的内容:

  

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

http://www.w3.org/Addressing/rfc1808.txt

如果您要解析mailto:个网址等,则必须使用NSURL之外的其他内容来执行此操作。

答案 1 :(得分:2)

对于非R​​FC 1808兼容的URL,您可能希望使用-[NSURL resourceSpecifier]来检索冒号后的URL部分。在那之后,如果适合,你可以将它分解为“路径”和“查询”。