2009-09-23 16 views
5

Ho alcune risorse (zippate) che devono essere spedite con la mia applicazione iphone. Quando l'app viene avviata per la prima volta, questo file zippato deve essere spostato/copiato nella cartella Documenti e decomprimerlo. L'utente può quindi aggiungere più file a questo percorso dall'applicazione. Qualcuno può suggerire come posso ottenerlo?iPhone SDK - Aggiunta di contenuto zippato nelle risorse e quindi decompressione nella cartella Documenti

Grazie!

+0

Un piccolo inconveniente con i metodi seguenti, finora, è che si sta occupando il doppio dello spazio per la memorizzazione di queste risorse; una copia che rende l'app più grande e una seconda copia nella directory Documenti. Potresti voler pensare se puoi semplicemente vivere con una copia. Immagino che la domanda da porsi sia se ti aspetti che queste risorse siano di lettura/scrittura o di sola lettura. Se quest'ultimo, ti suggerirei di trovare un modo per aggirare la necessità di copiarli. – mahboudz

+0

Se sono di sola lettura, ma li vuoi nella cartella Documenti perché l'utente potrebbe aggiungervi altri file e vorresti che fossero tutti in un posto, suggerirei di utilizzare collegamenti simbolici invece di copiare i file. – mahboudz

risposta

6

In base al commento di cui sopra:

Il motivo che voglio aggiungere una risorsa compressa perché ci sono più file. Se non comprimo, avrò lo necessario spostare i file individualmente. Avrò anche il di mantenere un elenco di file in modo da poter leggere il nome del file e quindi spostarli. Pensavo che lo zippamento e la decompressione fossero una soluzione più semplice .

È possibile aggiungere tutti i file in una cartella del pacchetto. Quando l'app si avvia per la prima volta, utilizzare l'enumerazione rapida per scorrere la cartella e ciò che trova in quella cartella, viene copiata nella cartella Documenti. Gestire le cartelle all'interno delle cartelle è leggermente più complesso (magari aggiungere la ricorsione). In questo modo non devi preoccuparti di zip o tar, né di tenere una directory di file da installare.

Basta posizionare la cartella dei file che si desidera nella cartella delle risorse Xcode e dirgli di importare come cartella non come un gruppo. In questo modo i file vengono installati nelle risorse all'interno di una cartella anziché solo come singoli file dappertutto.

EDIT:

Meglio ancora, fare quello che dico di mettere tutti i file che si desidera in una cartella, aggiungere al progetto, ma non come un "gruppo", e poi al primo utilizzo del lancio:

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

e copia l'intera directory da un luogo a un altro. FACILE!

4

Aggiungere il framework libz.dylib al progetto e includere Deusty's NSData gzip category che fornirà i metodi di compressione/decompressione.

+0

Non necessario decomprimere tutti i file nella memoria temporanea, se è possibile decomprimere singoli file (su un file o, preferibilmente, su NSData) su richiesta (gli archivi zip comprimono i file di origine singolarmente e mantengono la gerarchia delle cartelle originali). Non so di una buona lib compatibile con iPhone che rende questo facile però. – avocade

3

Sebbene questo sia disponibile utilizzando libz.dylib, non è necessario in quanto consente di risparmiare spazio (se presente). Il pacchetto di applicazioni è già compresso durante il trasferimento al telefono. La compressione sopra la compressione di solito produce una compressione aggiuntiva minima.

Provalo tu stesso. Potresti scoprire che spedire la tua app con contenuti decompressi potrebbe occupare tanto spazio quanto i contenuti compressi.

+0

Il motivo per cui voglio aggiungere una risorsa compressa perché ci sono più file. Se non comprimo, dovrò spostare i file individualmente. Avrò anche bisogno di mantenere un elenco di file da qualche parte in modo da poter leggere il nome del file e quindi spostarli. Pensavo che zippare e decomprimere fosse una soluzione più semplice. – Mithin

+0

Puoi usare 'libtar' (http://www.feep.net/libtar/) se hai solo bisogno di un modo per archiviare/disarchiviare e non vuoi la complessità temporale di una risorsa' zip'-ped. –

Problemi correlati