我有
形式的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”的最终结果?
答案 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];