2012-04-24 40 views
5

我有形式如何將一個類似「?x = 123」的東西添加到NSURL中?

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

的NSURL,我想追加到它,因此最終的網址是這樣

"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」的最終結果?

回答

8

我覺得這裏最簡單的答案是創建使用舊的基本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); 
} 
+0

當我嘗試上面顯示的方法我的網址不是正確的它出現像「?x = 1&y = 2&z = 3 http://foo.com/bar/baz」倒轉請提供一些解決方案如果你有這個。 謝謝 – 2015-11-20 07:46:13

+0

@jalakpatel'url.description'返回'?x = 1&y = 2&z = 3 - http:// foo.com/bar/baz',所以'NSLog(@「URL:%@」,url)'將把'「URL:?x = 1&y = 2&z = 3 - http://foo.com/bar/baz」'放入調試器。如果你想顯示完整的URL,使用'url.absoluteString'。例如,'NSLog(@「URL:%@」,url.absoluteString)'會將':URL:http://foo.com/bar/baz?x=1&y=2&z=3「'放入調試器。 – 2015-11-20 10:42:17

+0

@jalakpatel注意:'url.description'僅用於顯示。將'url'傳遞給任何需要URL的方法將會到達正確的位置。 – 2015-11-20 10:47:08

5

創建您的實際NSURL最後一個對象,從NSString你建立需要:

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

NSURL *url = [NSURL URLWithString:urlString]; 
+1

的問題(即'URLByAppendingPathComponent'應該解決)的是,如果你的基地址沒有一個斜線,除非您明確檢查它,否則會得到一個損壞的網址。看起來像是一個非贏的場景,真的。 – devios1 2014-11-05 22:31:27

相關問題