2009-09-23 7 views
5

Tengo algunos recursos (comprimidos) que deben enviarse con mi aplicación iphone. Cuando la aplicación se inicia por primera vez, este archivo comprimido se debe mover/copiar a la carpeta Documentos y descomprimirlo allí. El usuario puede agregar más archivos a esta ruta desde la aplicación. ¿Puede alguien sugerir por favor cómo puedo lograr esto?iPhone SDK - Agregar contenido comprimido en recursos y luego descomprimirlo en la carpeta Documentos

Gracias!

+0

Una pequeña desventaja con los métodos a continuación, hasta ahora, es que ocupa el doble de espacio para almacenar estos recursos; una copia haciendo que su aplicación sea más grande y una segunda copia en el directorio de Documentos. Es posible que desee pensar si solo puede vivir con una copia. Supongo que la pregunta es si espera que estos recursos sean de lectura/escritura o de solo lectura. Si esto último, entonces sugeriría que encuentre una forma de evitar la necesidad de copiarlos. – mahboudz

+0

Si solo es de lectura, pero los quiere en la carpeta Documentos porque el usuario podría agregar algunos otros archivos allí, y desea que todos estén en un solo lugar, entonces le sugiero que use enlaces simbólicos en lugar de copiar los archivos. – mahboudz

Respuesta

6

Basado en su comentario anterior:

La razón por la que quiero añadir un recurso comprimido debido a que hay múltiples archivos. Si no comprime, entonces voy a necesito mover los archivos de forma individual. Voy a también necesito mantener una lista de archivos en algún lugar para que pueda leer el archivo nombre y luego moverlos. Pensé que comprimir y descomprimir era una solución más simple .

Puede agregar todos los archivos a una carpeta en su paquete. Cuando la aplicación se inicia por primera vez, utilice la enumeración rápida para ejecutar en la carpeta y lo que encuentre en esa carpeta, se copia en la carpeta Documentos. Manejar las carpetas dentro de las carpetas es un poco más complejo (agregar recursividad tal vez). De esta forma, no tiene que preocuparse por zip o tar, ni para mantener un directorio de archivos para instalar.

Simplemente coloque la carpeta de archivos que desea en la carpeta de recursos de Xcode y dígale que importe como una carpeta no como un grupo. De esa forma, los archivos se instalan en sus recursos dentro de una carpeta en lugar de solo como archivos individuales en cualquier lugar.

EDIT:

Mejor aún, hacer lo que digo acerca de poner todos los archivos que desea en una carpeta, añadir a su proyecto, pero no como un "Grupo", y luego en el primer uso de lanzamiento:

[[NSFileManager defaultManager] copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error]; 

y copiará todo su directorio de un lugar a otro. ¡FÁCIL!

4

Agregue el libz.dylib Marco a su proyecto, e incluya Deusty's NSData gzip category que le dará métodos de compresión/descompresión.

+0

Innecesario para desempaquetar todos los archivos en el almacenamiento temporal, si es posible descomprimir archivos individuales (en un archivo o, preferiblemente, en NSData) bajo demanda (los archivos zip comprimen los archivos fuente individualmente y mantienen la jerarquía de la carpeta original). No sé de una buena lib compatible con iPhone que hace que esto sea fácil. – avocade

3

Si bien esto está disponible al usar libz.dylib, no es necesario, ya que le ahorra poco espacio (si lo tiene). Su paquete de aplicación ya está comprimido cuando se transfiere al teléfono. La compresión sobre la compresión generalmente produce poca compresión adicional.

Pruébelo usted mismo. Puede encontrar que el envío de su aplicación con contenido descomprimido puede ocupar tanto espacio como contenido comprimido.

+0

El motivo por el que quiero agregar un recurso comprimido porque hay varios archivos. Si no comprime, tendré que mover los archivos de forma individual. También necesitaré mantener una lista de archivos en algún lugar para poder leer el nombre del archivo y luego moverlos. Pensé que comprimir y descomprimir era una solución más simple. – Mithin

+0

Puede usar 'libtar' (http://www.feep.net/libtar/) si solo necesita una forma de archivar/desarchivar y no desea la complejidad de tiempo de un recurso' zip'-ped. –

Cuestiones relacionadas