2012-07-04 10 views
27

Voglio scaricare un file zip contiene una cartella con un sacco di file audio che usano per la mia pronuncia nel dizionario. Io uso ASIHTTPRequest per scaricarlo e il mio problema è "Non so come decomprimere quel file". Ho provato a utilizzare SSZipArchive e ZipArchive entrambi sono basati su minizip ma ho ricevuto un errore durante la compilazione del codice Undefined symbols for architecture i386: "_OBJC_CLASS_$_ZipArchive", referenced from: objc-class-ref in AppDelegate.o. Quindi potresti darmi dei consigliscaricare e decomprimere il file in iOS

+0

il tuo errore significa che stai usando una libreria statica solo per iPhone con il simulatore ... –

+0

@ H2CO3: come posso risolverlo ... –

+0

Non puoi usarlo su thesimulator, solo su un dispositivo reale. –

risposta

49

Ho usato ZipArchive con successo in passato. È abbastanza leggero e semplice da utilizzare, supporta la protezione tramite password, più file all'interno di un ZIP e comprime la decompressione &.

L'uso di base è:

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]; 

più esempi di questo pacchetto here

Ho anche provato SSZipArchive in alcuni progetti. Sotto la riga decomprimere il file zip.

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

Quest'ultimo SSZipArchive one-liner è molto più semplice in quanto gestisce anche la scrittura file estratti. Piuttosto pulito. – Hlung

+0

ottima risposta! – Vivo

+1

Questa è stata la soluzione più semplice e leggera che ho valutato da circa 3 migliori raccomandazioni. ZipArchive funziona bene – jcpennypincher

-5

Su iOS6 un file ZIP sembra essere gestito come una cartella. Ho avuto successo semplicemente facendo quanto segue:

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

Ci potrebbe essere una possibilità che si può anche fare un elenco di directory per decomprimere i file con contenuto sconosciuto. Non so però di file ZIP protetti da password.

+1

Non ha funzionato per me:/ – Cfr

+0

Non funziona neanche per me: NSUnderlyingError = 0x8594310 "Impossibile completare l'operazione. Non una directory". Includere la libreria zip corretta non sembra essere d'aiuto. – Rick77

2

Per iniziare, in iOS 7, Apple ha introdotto la possibilità di aprire/decomprimere i file in modo nativo. Hai anche l'opzione in modo da inviare i file zip tramite Mail, Messaggi, Airdrop e "Apri in". La chiave è: Il file zip deve essere supportato da iOS Alcuni lo sono, altri no. Il primo passo: scopri se il tuo file è supportato. Fai questo con un semplice controllo del file appena salvato. Prova ad aprirlo. Se è bloccato "In attesa ..." è probabilmente non supportato. Prova una libreria diversa o usa una soluzione alternativa, se questo è il caso.

Ora, facendo questo programmaticamente Attualmente è necessario l'uso di una libreria di terze parti per salvare i file zip ed estrarli. Questo non è l'ideale, dal momento che molte persone/aziende evitano di usarli. Detto questo, la risposta contrassegnata corretta, ZipArchive è un ottimo strumento di terze parti, soprattutto perché ora supporta Swift. Consiglierei di usarlo fino a quando Apple non introdurrà una libreria nativa.