2012-07-04 12 views
27

Quiero descargar un archivo zip que contiene una carpeta con muchos archivos de audio que se usan para mi pronunciación en el diccionario. Utilizo ASIHTTPRequest para descargarlo y mi problema es "No sé cómo descomprimir ese archivo". Traté de usar SSZipArchive y ZipArchive ambos están basados ​​en minizip pero recibí un error cuando compilo el código Undefined symbols for architecture i386: "_OBJC_CLASS_$_ZipArchive", referenced from: objc-class-ref in AppDelegate.o. Entonces podría darme algunos consejosdescarga y descomprime el archivo en iOS

+0

su error significa que está utilizando una biblioteca estática solo para iPhone con el simulador ... –

+0

@ H2CO3: cómo puedo resolverlo ... –

+0

No puede usar esto en el simulador, solo en un dispositivo real. –

Respuesta

49

He usado ZipArchive con éxito en el pasado. Es bastante liviano y fácil de usar, admite la protección con contraseña, múltiples archivos dentro de un ZIP, y también comprime & descompresión.

El uso básico es:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"]; 
ZipArchive *zipArchive = [[ZipArchive alloc] init]; 
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"]; 
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES]; 
[zipArchive UnzipCloseFile]; 
[zipArchive release]; 

más ejemplos sobre este paquete here

También he intentado SSZipArchive en algunos proyectos. debajo de la línea se descomprimiría el archivo zip.

[SSZipArchive unzipFileAtPath:path toDestination:destination]; 
+0

El último SSZipArchive de una línea es mucho más fácil ya que también maneja la escritura archivos extraídos Con buena pinta. – Hlung

+0

excelente respuesta! – Vivo

+1

Esta fue la solución más simple y liviana que he evaluado de unas 3 recomendaciones principales. ZipArchive funciona bien – jcpennypincher

-5

En iOS6, un archivo ZIP parece manejarse como una carpeta. Tenía éxito simplemente haciendo lo siguiente:

[[NSFileManager defaultManager] copyItemAtPath:[NSURL URLForCachesDirectoryWithAppendedPath:@"ZIP_FILE.zip/Contents/Test.m4a"].path 
             toPath:[NSURL URLForCachesDirectoryWithAppendedPath:@"Test.m4a"].path 
             error:nil]; 

Puede haber una posibilidad de que incluso se puede hacer un listado de directorio para descomprimir los archivos con contenido desconocido. Sin embargo, no conozco los archivos ZIP protegidos por contraseña.

+1

No funcionó para mí:/ – Cfr

+0

No funciona para mí tampoco: NSUnderlyingError = 0x8594310 "La operación no se pudo completar. No es un directorio". Incluir la biblioteca zip correcta no parece ayudar. – Rick77

2

Para empezar, en iOS 7, Apple introdujo la capacidad de comprimir/descomprimir archivos de forma nativa. También tiene la opción, envíe los archivos comprimidos a través de Mail, Messages, Airdrop y "Abrir en". La clave es: El archivo zip debe ser compatible con iOS Algunos son, y otros no. El primer paso: descubra si su archivo es compatible. Haga esto con una simple comprobación de su archivo recién guardado. Intenta abrirlo. Si está atascado en "Esperando ...", es probablemente no sea compatible con. Pruebe con una biblioteca diferente o use una solución si este es el caso.

Ahora, haciendo esto programáticamente Actualmente requiere el uso de una biblioteca de terceros para guardar archivos zip y extraerlos. Esto no es ideal, ya que muchas personas/compañías evitan usarlos. Dicho esto, la respuesta es correcta, ZipArchive es una gran herramienta de terceros, especialmente porque ahora es compatible con Swift. Recomendaría usarlo hasta que Apple presente una biblioteca nativa.

Cuestiones relacionadas