4

我正在尝试使用 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];

一切正常。为什么是这样?

谢谢!

4

2 回答 2

2

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

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

- (NSString *)path

URL 的路径,未使用该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:URL 等,您将不得不使用其他东西NSURL来完成它。

于 2012-08-31T23:44:15.833 回答
2

对于不符合 RFC 1808 的 URL,您可能希望用于-[NSURL resourceSpecifier]检索冒号后的 URL 部分。之后,如果合适,您可以将其分解为“路径”和“查询”。

于 2013-04-09T17:23:23.800 回答