2012-04-24 20 views
5

Ho un NSURL della formaCome si aggiunge qualcosa come "? X = 123" a un NSURL?

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

e voglio aggiungere ad essa in modo che l'URL finale è come questo

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

Ma se faccio questo

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

Poi il risultato è

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

(è lo stesso risultato se si utilizza URLByAppendingPathExtension).

Ma se faccio questo

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

Poi il risultato è

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

(anche lo stesso risultato se URLByAppendingPathExtension è utilizzato).

Nessuno dei due è quello che sto cercando. Come posso ottenere un risultato finale di "http://abc.def.com:1234/stuff/?x=123"?

risposta

8

Penso che la risposta più semplice è quello di creare un nuovo URL utilizzando il vecchio come l'URL di base.

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

Ecco uno unit test che verifica la logica

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

Quando sto provando sopra metodo mostrato Il mio url non sta arrivando corretto appare invertito come "? X = 1 & y = 2 & z = 3 http://foo.com/bar/baz" si prega di fornire qualche soluzione Se avete per questo. Grazie –

+0

@jalakpatel 'url.description' restituisce'? X = 1 & y = 2 & z = 3 - http: // foo.com/bar/baz', quindi 'NSLog (@" URL:% @ ", url)' metterà "URL:? x = 1 & y = 2 & z = 3 - http://foo.com/bar/baz" 'nel debugger. Se vuoi visualizzare l'URL completo, usa "url.absoluteString". Ad esempio, 'NSLog (@" URL:% @ ", url.absoluteString)' inserirà '" URL: http://foo.com/bar/baz?x=1&y=2&z=3 "' nel debugger. –

+0

@jalakpatel NOTA: 'url.description' è solo a scopo di visualizzazione. Passando 'url' a qualsiasi metodo che prende un URL andrà nella posizione corretta. –

5

Crea il tuo attuale NSURL ultimo oggetto, da un NSString che si costruisce in base alle esigenze:

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

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

Il problema di questo approccio (che 'URLByAppendingPathComponent' si suppone per risolvere) è che se il vostro URL di base non ha una barra finale , otterrai un URL stroncato come risultato a meno che tu non lo controlli esplicitamente. Sembra uno scenario senza vincite, davvero. – devios1

Problemi correlati