Mi tarea es mostrar los tipos de documentos admitidos en un iPhone con sistema operativo 3.x, como .pdf, .rtf, .doc , .ppt, .png, .tiff, etc.iPhone UIWebView: loadData no funciona con ciertos tipos (Excel, MSWord, PPT, RTF)
Ahora, he guardado estos archivos cifrados sólo se en el disco. Por razones de seguridad, quiero evitar almacenarlos sin cifrar en el disco.
Por lo tanto, yo prefiero usar loadData:MIMEType:textEncodingName:baseURL:
en lugar de loadRequest:
para mostrar el documento porque loadData
me permite pasar el contenido de un objeto NSData, es decir, que pueda descifrar el archivo en la memoria y no tienen necesidad de almacenarlo en el disco, como sería necesario cuando se usa loadRequest
.
El problema es que loadData
no parece trabajar con todos los tipos de archivos:
Las pruebas muestran que todos los tipos de imágenes parecen funcionar PDF finas, así como, mientras que los tipos más complejos no lo hacen. Llego a errores tales como:
NSURLErrorDomain Code=100
NSURLErrorDomain Code=102
WebView parece necesitar una URL verdaderamente trabajar para acceder a los documentos como un archivo, a pesar de que me ofrecía todo el contenido a través del objeto NSData ya.
Aquí está el código que utilizo para mostrar el contenido:
[webView loadData:data MIMEType:type textEncodingName:@"utf-8" baseURL:nil];
El tipo MIME se establece correctamente, por ejemplo, a "application/msword" para archivos .doc.
¿Alguien sabe cómo podría obtener loadData
para trabajar con todos los tipos que admite loadRequest? O, como alternativa, ¿hay alguna manera de saber qué tipos funcionan con seguridad (es decir, sancionado oficialmente por Apple) con loadData? Entonces puedo trabajar dos veces, creando un archivo temporal no cifrado solo para aquellos casos que loadData no le gustará.
actualización
Parece que no soy el primero que se ejecuta en esto. Ver aquí:
http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00216.html
lo tanto, supongo, que es el status quo, y nada de lo que puede hacer al respecto.
Alguien sugirió una solución alternativa que podría trabajar, sin embargo:
http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00219.html
Básicamente, la idea es proporcionar un pequeño servidor HTTP que sirve el archivo (de memoria en mi caso), y luego use loadRequest. Sin embargo, esto probablemente requiera un poco más de memoria, ya que tanto el servidor como la vista web probablemente mantendrán todo el contenido en la memoria como dos copias, en lugar de usar loadData, donde ambos preferirían compartir el mismo objeto de datos. (Tenga en cuenta que tendré que guardar los datos descifrados en la memoria, ese es el punto aquí).
También he experimentado rarezas cuando se trabaja con archivos que no son html en 'UIWebView'. Me temo que parece que 'UIWebView', entre otras cosas, mira la URL del archivo que intenta cargar. Cargar con un archivo temporal no encriptado con una URL de archivo podría ser tu única salida "segura" (hasta donde yo sé). – alleus