如何将“?x = 123”附加到NSURL?

时间:2012-04-24 19:45:23

标签: ios

我有

形式的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”的最终结果?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:5)

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

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

NSURL *url = [NSURL URLWithString:urlString];