versiones para descargar apple actualizar iphone resources uiwebview directory relative-path

iphone - para - ios versiones



iPhone dev: cargar un archivo de la carpeta de recursos (3)

Estoy escribiendo una aplicación para iPhone con UIWebView que debe mostrar varios archivos html que tengo en la carpeta de recursos de la aplicación. En xcode mi descripción general del proyecto, estos archivos html se muestran así:

dirA |---> index.html |---> a1.html |---> a2.html |---> my.css |---> dirB |---> b1.html |---> b2.html |---> dirC |---> c1.html |---> c2.html

Estos recursos se agregaron al proyecto como tal:

  • Marcado "Copiar elementos en la carpeta de grupos de destino (si es necesario)".
  • Tipo de referencia: predeterminado.
  • Codificación de texto: Unicode (utf-8).
  • Recursivamente crear grupos para cualquier carpeta agregada.

Los enlaces en mi html son relativos, lo que significa que se ven así:

<a href="a1.html">a1</a> <a href="a2.html">a2</a> <a href="dirB/b2.html">b2</a> <a href="dirC/c1.html">c1</a>

Para mostrar el archivo index.html cuando se inicia la aplicación, utilizo el siguiente código:

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; NSURL *url = [NSURL fileURLWithPath:path]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [webView loadRequest:request];

Esto funciona bien Los siguientes enlaces del archivo de índice también funcionan bien, siempre que los archivos html solicitados estén directamente bajo dirA. Si el enlace seguido apunta a un archivo en un subdirectorio, entonces didFailLoadWithError detectará la situación e informará que el archivo solicitado no existe.

También,

[webView loadHtmlString:myHtml];

no puede ser parte de la solución, ya que necesito botones para avanzar y retroceder para trabajar en mi vista web.

Entonces la pregunta es: ¿cómo puedo seguir un enlace relativo a un archivo html en un subdirectorio dentro de mis recursos?

Estuve todo el stackoverflow y el resto de los tubos durante los últimos días tratando de resolverlo, pero en ninguna parte encontré la solución a este problema exacto. Cualquier idea en absoluto sería muy, muy apreciada!

EDIT: Yoohoo! ¡Me lo imaginé! ¡Qué alegría! Aquí esta lo que hice:

  1. Importé mis recursos de nuevo, eligiendo "Crear referencias de carpetas para cualquier carpeta agregada" en lugar de "Crear grupos recursivamente para cualquier carpeta agregada".
  2. Especificó el directorio raíz para el recurso, así: NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];

Los subdirectorios que usa en XCode son grupos no carpetas reales. es probable que todos los recursos se aplanan en la carpeta de salida. Si crea carpetas reales fuera de XCode que podrían funcionar. Intenta crear la carpeta y la jerarquía de archivos y arrastra / suelta en XCode. También verifique su carpeta de compilación usando Finder para ver exactamente cómo XCode está implementando sus archivos.


Para crear carpetas en el paquete de la aplicación, arrastre la carpeta a Xcode y seleccione el botón de opción: "Crear referencias de carpeta para cualquier carpeta agregada".


Me las arreglé para usar archivos HTML que contienen recursos y enlaces utilizando rutas de acceso relativas utilizando el +fileURLWithPath: inicializador en lugar de +URLWithString: al cargar una cadena HTML y pasar unaURUR base en la vista web.

NSString* path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"HTMLContent"]; NSString* htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; [self.webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:path]];

"HTMLContent" es mi equivalente para su "dirA". No se requieren otros cambios.