5

我有一个形式的 NSURL

"http://abc.def.com:1234/stuff/"

我想附加到它,所以最终的网址是这样的

"http://abc.def.com:1234/stuff/?x=123".

但如果我这样做

url = [NSURL URLWithString:@"http://abc.def.com:1234/stuff/?"];
url = [url URLByAppendingPathComponent:@"x=123"];

然后结果是

http://abc.def.com:1234/stuff/x=123?

(如果使用 URLByAppendingPathExtension,结果相同)。

但如果我这样做

url = [NSURL URLWithString:@"http://abc.def.com:1234/stuff/?"];
url = [url URLByAppendingPathComponent:@"x=123"];

然后结果是

http://abc.def.com:1234/stuff/%3Fx=123

(如果使用 URLByAppendingPathExtension 也是同样的结果)。

这两者都不是我所追求的。如何获得 "http://abc.def.com:1234/stuff/?x=123" 的最终结果?

4

2 回答 2

8

我认为这里最简单的答案是使用旧 URL 作为基本 URL 创建一个新 URL。

url = [NSURL URLWithString:@"?x=123" relativeToURL:url]

这是一个检查逻辑的单元测试

- (void)testCreatingQueryURLfromBaseURL
{
    NSURL *url = [NSURL URLWithString:@"http://foo.com/bar/baz"];

    url = [NSURL URLWithString:@"?x=1&y=2&z=3" relativeToURL:url];

    STAssertEqualObjects([url absoluteString], @"http://foo.com/bar/baz?x=1&y=2&z=3", nil);
}
于 2012-04-24T21:40:13.617 回答
5

最后创建您的实际NSURL对象,从NSString您根据需要构建的对象:

NSString *urlString = @"http://www.site.com/";
if (some condition)
    urlString = [urlString stringByAppendingString:@"?x=123"];

NSURL *url = [NSURL URLWithString:urlString];
于 2012-04-24T19:49:12.747 回答