NSURL: URLByAppendingPathComponent: ¿conversos? en% 3F, pero luego UIWebView deshace esa conversión que da como resultado fallas de carga

Estoy cargando una página html local y dentro de shouldStartLoadWithRequest: con la siguiente URL:

... /Library/Application%20Support/CDS/%3Fpid=27ce1ef8-c75e-403b-aea1-db1ae31e05cc/... 

dentro de esa página si un usuario hace clic en un enlace para ir a un website externo, entonces hacen clic en el button Atrás mi código trata con:

 if ([self.webView canGoBack]) [self.webView goBack]; 

Sin embargo, cuando shouldStartLoadWithRequest: se vuelve a llamar como resultado de llamar a [self.webView goBack], la URL que se pasa a shouldStartLoadWithRequest: se ha cambiado a:

 `... /Library/Application%20Support/CDS/?pid=27ce1ef8-c75e-403b-aea1-db1ae31e05cc/..`. 

es decir, el sistema operativo ha cambiado el "% 3F" dentro de la URL a "?".

Devuelvo SÍ desde shouldStartLoadWithRequest: pero debido a "% 3f" que pasa a "?" tiene la consecuencia que hizoFailLoadWithError: se llama con WebKitErrorDomain 102 y la página no se carga.

¿El file realmente tiene? en su nombre pero son las llamadas al sistema iOS que convierten eso en% 3F durante el process de creación del object NSURL que se pasa a UIWebView: loadRequest: de la siguiente manera

 NSURL *fullURL = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create: YES error:&err]; fullURL = [fullURL URLByAppendingPathComponent:folderLocation isDirectory:YES]; fullRUL = [fullURL URLByAppendingPathComponent: pageToLoad isDirectory:NO]; NSURLRequest *requestObj = [NSURLRequest requestWithURL: fullURL]; [self.webView loadRequest:requestObj]; 

folderLocation es un NSString que contiene el?, la llamada a URLByAppendingPathComponent convierte automáticamente esto en% 3F, sin esa conversión falla la carga de la página.

Alguien ha visto esto antes?

No uso las URL del file pero tuve el mismo problema. Parece que esta es la mejor manera de lidiar con eso.

 NSString *newURLString = [[origurl absoluteString] stringByAppendingPathComponent:appendedString]; NSURL *url = [NSURL URLWithString:newURLString]; 

Query params se debe agregar con el método relativeToURL. Prueba el siguiente código;

 NSURL *baseUrl = [self.baseURL URLByAppendingPathComponent:[NSString stringWithFormat:@"/api_url"]]; NSString *urlString = [[NSString stringWithFormat:@"?param1=%@&param2=%@", param1, param2] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString relativeToURL:baseUrl]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 

He resuelto el mismo problema de esta manera:

let baseRequest = "yourURLString"

let URLRequest = NSMutableURLRequest(URL: NSURL(string: baseRequest)!)

Lo más importante es pasar la URLRequest como una URL creada por una cadena.