Desarrollo de iOS: ¿Por qué falla mi NSURLConnection con un error de "URL incorrecta" solo para algunos usuarios?

Tengo una aplicación de iOS que solicita datos JSON de mi aplicación Rails 3, alojada en Heroku, y funciona muy bien en mi dispositivo y para muchos otros usuarios, excepto uno. Tengo un usuario que me ha dicho que mi aplicación no puede recuperar los datos de JSON, así que le envié algunos datos de logging y el logging mostró el método del delegado didFailWithError y la descripción del error dice "URL incorrecta" . ¿Por qué ocurre este error y por qué ocurre SOLO en algunos dispositivos en lugar de todos los dispositivos?

Aquí está mi código,

 -(void)getTournamentInfoWithUsername:(NSString*)username { NSString *urlString = [NSString stringWithFormat:@"http://myapp-tourney.heroku.com/tournaments/next.json?username=%@", username]; NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; [self setUrlConnection:[[NSURLConnection alloc] initWithRequest:request delegate:self]]; } - (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error { [MyLog logError:[NSString stringWithFormat:@"%@ - %@ - %@ - %@", [error localizedDescription], [error localizedFailureReason], [error localizedRecoveryOptions], [error localizedRecoverySuggestion]]]; } 

y el logging muestra …

 bad URL - (null) - (null) - (null) 

¡Muchas gracias por toda tu sabiduría!

No parece que esté codificando el nombre de usuario. ¿Hay espacios u otros caracteres especiales en el nombre de usuario? Busque en el uso del método stringByAddingPercentEscapesUsingEncoding:

Es probable que esto dependa de la URL específica que contiene caracteres que no están permitidos para una URL.

Puedes intentar escaping de la URL:

 - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding` 

No estoy seguro de cómo, si es que se relaciona con su problema, pero cambiar la Región en la aplicación Configuración tuvo un efecto en la capacidad de descarga de mi aplicación. Estaba escupiendo el mismo error de URL incorrecta si la región no estaba establecida en Estados Unidos. Podría explicar por qué algunos usuarios obtienen errores y no otros.

Este tipo de problema puede ocurrir debido a que los datos de argumento tienen caracteres especiales (es decir, Andy & Co). SOAP rechazará automáticamente esta request y devolverá la URL incorrecta o la request incorrecta. Entonces, antes de enviar los datos, asegúrese de que los datos tengan caracteres especiales como &, <,> … Si encontró & en sus datos de cadena, reemplace con <&> amp; a esa cadena (por ejemplo, Andy <&> amp; Co). Espero que esta input te sea de ayuda.

Nota: Antes de usar, elimine el inicio (<>) y finalice la label con ese símbolo.