2012-04-24 34 views
5

Tôi có một NSURL dạngLàm thế nào để thêm một cái gì đó như "? X = 123" vào NSURL?

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

và tôi muốn thêm vào nó để url cuối cùng là như thế này

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

Nhưng nếu tôi làm điều này

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

Sau đó, kết quả là

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

(kết quả tương tự nếu URLByAppendingPathExtension được sử dụng).

Nhưng nếu tôi làm điều này

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

Sau đó, kết quả là

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

(cũng là kết quả tương tự nếu URLByAppendingPathExtension được sử dụng).

Không một trong số đó là những gì tôi theo sau. Làm cách nào để có được kết quả cuối cùng của "http://abc.def.com:1234/stuff/?x=123"?

Trả lời

8

Tôi nghĩ câu trả lời đơn giản nhất ở đây là tạo ra một URL mới bằng cách sử dụng cũ như URL cơ sở.

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

Dưới đây là một thử nghiệm đơn vị để kiểm tra logic

- (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

Khi tôi đang cố gắng ở trên phương pháp hiển thị url của tôi không đến đúng nó xuất hiện ngược như "? X = 1 & y = 2 & z = 3 http://foo.com/bar/baz" xin vui lòng cung cấp một số giải pháp Nếu bạn có cho điều này. Cảm ơn –

+0

@jalakpatel 'url.description' trả về'? X = 1 & y = 2 & z = 3 - http: // foo.com/bar/baz', vì vậy 'NSLog (@" URL:% @ ", url)' sẽ đặt '" URL:? x = 1 & y = 2 & z = 3 - http://foo.com/bar/baz "' vào trình gỡ lỗi. Nếu bạn muốn hiển thị URL đầy đủ, hãy sử dụng 'url.absoluteString'. Ví dụ: 'NSLog (@" URL:% @ ", url.absoluteString)' sẽ đặt URL ": http://foo.com/bar/baz?x=1&y=2&z=3" vào trình gỡ lỗi. –

+0

@jalakpatel LƯU Ý: 'url.description' chỉ để hiển thị. Việc chuyển 'url' tới bất kỳ phương thức nào lấy URL sẽ đi đến vị trí chính xác. –

5

Tạo NSURL đối tượng của bạn thực tế cuối cùng, từ một NSString mà bạn xây dựng lên khi cần thiết:

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

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

Vấn đề với cách tiếp cận này (mà 'URLByAppendingPathComponent' có nghĩa vụ phải giải quyết) là nếu địa chỉ cơ sở của bạn không có một gạch chéo , bạn sẽ nhận được một url bị ngắt kết quả trừ khi bạn kiểm tra một cách rõ ràng. Có vẻ như một kịch bản không thắng, thực sự. – devios1

Các vấn đề liên quan