2012-04-24 10 views
5

que tienen un NSURL de la forma¿Cómo se puede agregar algo como "? X = 123" a un NSURL?

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

y quiero anexar a la misma por lo que la URL final es como esto

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

Pero si hago esto

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

Entonces el resultado es

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

(es el mismo resultado si se usa URLByAppendingPathExtension).

Pero si hago esto

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

A continuación, el resultado es

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

(también el mismo resultado si se utiliza URLByAppendingPathExtension).

Ninguno de los cuales es lo que estoy buscando. ¿Cómo obtengo el resultado final de "http://abc.def.com:1234/stuff/?x=123"?

Respuesta

8

creo que la respuesta más simple es crear una nueva dirección URL utilizando la antigua como la URL base.

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

Aquí es una unidad de prueba que comprueba la lógica

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

Cuando intento el método que se muestra arriba Mi URL no es correcta, aparece invertida como "? X = 1 & y = 2 & z = 3 http://foo.com/bar/baz". Proporcione alguna solución. Si tiene esta opción. Gracias –

+0

@jalakpatel 'url.description' devuelve'? X = 1 & y = 2 & z = 3 - http: // foo.com/bar/baz', por lo que 'NSLog (@" URL:% @ ", url)' pondrá '' URL:? x = 1 & y = 2 & z = 3 - http://foo.com/bar/baz "' en el depurador. Si desea visualizar la URL completa, use 'url.absoluteString'. Por ejemplo, 'NSLog (@" URL:% @ ", url.absoluteString)' colocará '" URL: http://foo.com/bar/baz?x=1&y=2&z=3 "' en el depurador. –

+0

@jalakpatel NOTA: 'url.description' es sólo para visualización. Pasar 'url' a cualquier método que tome una URL irá a la ubicación correcta. –

5

Cree su real NSURL último objeto, desde un NSString que se construye según sea necesario:

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

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

El problema con este enfoque (que 'URLByAppendingPathComponent' se supone que debe resolver) es que si su URL base no tiene una barra diagonal , obtendrá como resultado una URL mutilada a menos que lo compruebe explícitamente. Parece un escenario sin éxito, realmente. – devios1

Cuestiones relacionadas