2009-09-23 9 views
5

Mam pewne zasoby (skompresowane), które muszą zostać wysłane z moją aplikacją na iPhone'a. Gdy aplikacja uruchamia się po raz pierwszy, ten spakowany plik musi zostać przeniesiony/skopiowany do folderu Dokumenty i rozpakować go tam. Użytkownik może następnie dodać więcej plików do tej ścieżki z aplikacji. Czy ktoś może zasugerować, w jaki sposób mogę to osiągnąć?iPhone SDK - Dodawanie skompresowanej zawartości do zasobów, a następnie rozpakowanie w folderze Dokumenty

Dzięki!

+0

Jedną z lekkich wad metodami opisanymi poniżej jest jak dotąd dwukrotne zwiększenie przestrzeni do przechowywania tych zasobów; jedną kopię, dzięki czemu twoja aplikacja jest większa, a druga kopia znajduje się w katalogu dokumentów. Możesz zastanowić się, czy możesz po prostu żyć z jedną kopią. Przypuszczam, że pytanie, które należy zadać, dotyczy tego, czy oczekuje się, że te zasoby będą czytane/zapisywane, czy tylko do odczytu. Jeśli to drugie, proponuję znaleźć sposób na obejście potrzeby ich skopiowania. – mahboudz

+0

Jeśli są tylko do odczytu, ale chcesz je mieć w folderze Dokumenty, ponieważ użytkownik może dodać inne pliki i chciałbyś, aby wszystkie były w jednym miejscu, sugerowałbym użycie dowiązań symbolicznych zamiast kopiowania plików. – mahboudz

Odpowiedz

6

podstawie Twojego komentarza powyżej:

powód, dla którego chcesz dodać skompresowany zasobu, ponieważ istnieje wiele plików. Jeśli nie skompresuję, będę musiał przenieść pliki pojedynczo. Będę także musiał przechowywać listę plików gdzieś, aby móc odczytać nazwę pliku , a następnie przenieść je. Pomyślałem, że skompresowanie i rozpakowanie jest łatwiejsze niż .

Można dodać wszystkie pliki do folderu w pakiecie. Gdy aplikacja uruchamia się po raz pierwszy, użyj szybkiego wyliczenia, aby przejrzeć folder i znaleźć go w tym folderze, a następnie skopiować go do folderu Dokumenty. Obsługa folderów w folderach jest nieco bardziej skomplikowana (może dodać rekursję). W ten sposób nie musisz się martwić o zip lub tar, ani przechowywać katalogu plików do zainstalowania.

Po prostu umieść folder z plikami w folderze zasobów Xcode i powiedz, aby go zaimportować jako folder, a nie jako grupę. W ten sposób pliki są instalowane w zasobach wewnątrz folderu, a nie tylko jako pojedyncze pliki w całym miejscu.

EDIT:

jeszcze lepiej robić to, co mogę powiedzieć o umieszczenie wszystkich żądanych plików w jednym folderze, dodać do swojego projektu, ale nie jako „grupa”, a następnie przy pierwszym użyciu premiery:

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

spowoduje skopiowanie całego katalogu z jednego miejsca do drugiego. ŁATWO!

4

Dodaj ramę libz.dylib do projektu i dołącz Deusty's NSData gzip category, która zapewni metody kompresji/dekompresji.

+0

Nie trzeba rozpakowywać wszystkich plików do pamięci tymczasowej, jeśli możliwe jest zdekompresowanie pojedynczych plików (do pliku lub, najlepiej, do NSData) na żądanie (archiwa zip kompresują pliki źródłowe indywidualnie i zachowują oryginalną hierarchię folderów). Nie znam dobrej biblioteki zgodnej z iPhonem, która czyni to jednak łatwym. – avocade

3

Chociaż jest to dostępne za pomocą libz.dylib, to naprawdę nie jest konieczne, ponieważ pozwala zaoszczędzić niewiele (jeśli w ogóle) miejsca. Pakiet aplikacji jest już skompresowany podczas przesyłania do telefonu. Kompresja na górze kompresji zwykle daje niewielką dodatkową kompresję.

Wypróbuj sam. Może się okazać, że wysyłka aplikacji z rozpakowaną zawartością może zająć tyle samo miejsca co spakowana zawartość.

+0

Powód, dla którego chcę dodać skompresowany zasób, ponieważ istnieje wiele plików. Jeśli nie skompresuję, będę musiał przenieść pliki indywidualnie. Będę również musiał przechowywać listę plików gdzieś, aby móc odczytać nazwę pliku, a następnie przenieść je. Myślałem, że skompresowanie i rozpakowanie jest prostszym rozwiązaniem. – Mithin

+0

Możesz użyć 'libtar' (http://www.feep.net/libtar/), jeśli potrzebujesz tylko sposobu na archiwizację/archiwizację i nie potrzebujesz złożoności czasowej zasobu' zip'-ped. –

Powiązane problemy