2009-12-30 10 views
87

puede ser muy fácil, pero no parece averiguar por qué URLWithString: devuelve nil aquí.URLWithString: devuelve nil

//localisationName is a arbitrary string here 
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false&key=", webName]; 
NSURL* url = [NSURL URLWithString:stringURL]; 
+1

¿Cuál es el valor de 'webName' antes de su llamada a' stringWithFormat: ' Entonces, ¿cuál es el valor de 'stringURL' antes de su llamada a' URLWithString: '? Use 'NSLog()' para imprimirlos paso a paso, o, establezca puntos de interrupción e inspeccione los valores tal como están configurados. –

Respuesta

189

tiene que escapar los caracteres no ASCII en su URL codificado así:

//localisationName is a arbitrary string here 
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName]; 
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL* url = [NSURL URLWithString:webStringURL]; 

probablemente Puede eliminar el escape de la localisationName ya que será manejado por el escape de toda la cadena.

+0

Thnx Funciona bien ......... –

+0

funciona .... bueno – Akshay

+0

Tratando de entender por qué URLWithString está dando aquí. Los documentos de Apple dicen "Debe ser una URL que se ajuste a RFC 2396. Este método analiza URLString de acuerdo con RFCs 1738 y 1808.". Haciendo un poco de lectura ... – russau

8

Supongo que necesita usar -[NSString stringByAddingPercentEscapesUsingEncoding:]. Ver Apple doc.

Otro comentario es que, como un viejo temporizador, me resulta un poco incómodo para poner caracteres no ASCII en un archivo de origen. Dicho esto, este Apple doc dice, a partir de 10.4, las cadenas UTF-16 están bien dentro de @"...". De alguna manera, GCC parece convertir correctamente el archivo fuente en Latin-1 en UTF-16 en el binario, pero creo que es más seguro usar caracteres ASCII de 7 bits solo dentro del código fuente, y usar NSLocalizedString.

2

Creo que tus personajes acentuados están tirando cosas; no serán manejados por -stringByAddingPercentEscapesUsingEncoding :.

0

La llamada URLWithString: devolverá un valor nulo si la cadena que se le pasa está mal formada. Dado que NSURL devuelve nil para las URL malformadas, NSLogue su cadena y establezca puntos de interrupción para ver exactamente qué se está pasando a su método de creación de NSURL. Si su URLWithString funciona con un valor codificado, eso es una prueba más de que todo lo que está pasando está mal formado. see

0

Puede usar NSURL directamente sin NSString.

archivo //.h

@interface NewsBrowser : UIViewController { 

    UIWebView *webView; 
    NSURL *NewsUrl; 

} 

@property (nonatomic, retain) IBOutlet UIWebView *webView; 

@property(nonatomic,assign)NSURL *NewsUrl; 

@end 

archivo //.m

[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]]; 

y paso la URL desde otro punto de vista (mediante la variable NewsUrl) a este punto de vista.

Pruébalo.

+0

Esta respuesta no se refirió a la cuestión en absoluto, que fue preguntando por qué URLWithString: volvía nula. (Además, ni siquiera mostró un medio para cambiar una cadena a una URL.) – ArtOfWarfare

37

Use esta función si trabaja con archivos guardados en el administrador de archivos.

+0

gracias eso es lo que estaba buscando. – user1258240

+0

Esto también funcionó para mí – ekscrypto

+0

¡Esta fue una solución excelente y concisa, gracias! – ThinkBonobo

2

NSURL URLWithString: @ "" devolverá nil si la URL no es conforme a la RFC 2396 y deben ser escapado

Si usted lee a través rfc2396 en el enlace obtendrá un montón de detalles

Un gran sitio que encontré para comprobar donde el carácter infractor es, elegir la opción de ruta de URL

http://www.websitedev.de/temp/rfc2396-check.html.gz

Cuestiones relacionadas