2012-04-24 17 views
5

मैं प्रपत्रकोई एनएसआरएल में "? X = 123" जैसा कुछ कैसे जोड़ता है?

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

का एक NSURL है और मैं इसे करने के लिए संलग्न करने के लिए तो अंतिम url इस

"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" जैसा उलटा हुआ है, कृपया कुछ समाधान प्रदान करें यदि आपके पास यह है। धन्यवाद –

+0

@jalakpatel 'url.description' रिटर्न' x = 1 और y = 2 और z = 3 - http: // foo.com/bar/baz', इसलिए 'NSLog (@" URL:% @ ", url)' '" यूआरएल:? x = 1 और y = 2 और z = 3 - http://foo.com/bar/baz "को डीबगर में रखेगा। यदि आप पूरा यूआरएल प्रदर्शित करना चाहते हैं, तो 'url.absoluteString' का उपयोग करें। उदाहरण के लिए, 'एनएसएलओजी (@ "यूआरएल:% @", url.absoluteString)' यूआरएल डाल देगा: http://foo.com/bar/baz?x=1&y=2&z=3 "' डीबगर में। –

+0

@ जलाकपेटेल नोट: 'url.description' केवल प्रदर्शन के लिए है। यूआरएल लेने वाली किसी विधि को 'यूआरएल' पास करना सही स्थान पर जाएगा। –

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

संबंधित मुद्दे