2011-08-10 15 views
5

Mam naprawdę dziwny problem z aplikacją na iPada, którą piszę. Podczas uruchamiania chcę skopiować folder zawierający kilka innych folderów (które są puste) z pakietu aplikacji do katalogu Documents. Folder do skopiowania, zwany "flds" (wszystkie małe litery), został dodany do projektu Xcode 4 za pomocą opcji "Utwórz odniesienia do folderów dla wszystkich dodanych folderów", a ja sprawdziłem, czy jest to faktycznie część pliku .app po kompilacji. (I to, że nie istnieją już podczas próby skopiowania.)Nie znaleziono folderu NSBundle na urządzeniu, ale działa w symulatorze

Próbowałem się do folderu „flds” za pomocą jednej z tych połączeń (wszystkie działają):

[[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"flds"] 
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flds"] 
[[NSBundle mainBundle] pathForResource:@"flds" ofType:@""] 

Następnie kopiowanie za pomocą metody NSFileManager copyItemAtPath:toPath:error: (lub równoważnika adresu URL przy użyciu adresu URL zamiast łańcucha ścieżki).

Wszystkie te strategie działają doskonale w Symulatorze iPada i na urządzeniu iPad, z następującym wyjątkiem: Kiedy (pomyślnie) buduję dla dystrybucji Ad Hoc, przeciągnij plik .app i .mobileprovision do iTunes, zsynchronizuj, a następnie uruchom aplikację na urządzeniu, system nie myśli już, że istnieje folder "flds"! Próbowałem to sprawdzić przez wiele godzin, bez powodzenia. Ponownie, jestem całkowicie pewien, że działa zarówno w symulatorze, jak i na urządzeniu działającym z Xcode, ale nie po zsynchronizowaniu przez iTunes.

Pomysły?

odkryłem, że następujące wywołanie pobiera ścieżkę do folderu z powodzeniem również po synchronizacji aplikacji na iPada za pośrednictwem iTunes:

[[NSBundle mainBundle] pathForResource:@"flds" ofType:nil inDirectory:nil] 

Jednak, kiedy skorzystać z tej ścieżki, aby skopiować folder do nowej lokalizacji w folderze Documents , tylko sam folder i plik .txt (który umieściłem tam jako test, tak naprawdę nie powinno tam być) zostaje skopiowany, a nie puste podfoldery 6-7. Znowu ten sam schemat pokazuje się: Działa zgodnie z oczekiwaniami zarówno na symulatorze, jak i na urządzeniu uruchomionym z Xcode (folder 'flds' z 'test.txt' i puste podfoldery są kopiowane pomyślnie), ale nie po zsynchronizowaniu przez iTunes (tylko folder 'flds' z "test.txt" są kopiowane, a nie podfoldery). Czy to naprawdę zamierzone zachowanie copyItemAtPath:toPath:error:? Dlaczego miałaby zachowywać się inaczej po synchronizacji z iTunes?

+0

Nie jestem pewien, czy próbowałeś tego, ale czy sprawdziłeś, czy folder flds istnieje w ostatecznej wersji (pakiet .app, który przeciągnąłeś do iTunes), klikając prawym przyciskiem myszy aplikację i wybierając Pokaż pakiet Zawartość? Powinieneś być w stanie zlokalizować pliki i foldery, do których próbujesz się tam dostać poprzez wyszukiwarkę. – Mark

+0

Próbowałem tego. Folder zdecydowanie tam jest. Próbowałem również umieścić plik .txt w jednym z podfolderów "flds" i uzyskać do niego dostęp za pośrednictwem pathForResource: ofType :, a to faktycznie działa. Pobieranie samego folderu nie jest możliwe. – hsdev

+0

Sprawdź, czy używasz pliku, którego nie ma na samym urządzeniu. Być może próbowałeś użyć pliku, który jest zapisany na twoim komputerze. Jeśli nie masz pewności, spróbuj otworzyć projekt z innego komputera i sprawdź, czy działa. – Sagiftw

Odpowiedz

0

W końcu doszedłem do wniosku, że copyItemAtPath:toPath:error: nie skopiowałoby pustych folderów, chociaż myślę, że powinno. I znowu, to zachowanie pojawiło się dopiero po zsynchronizowaniu aplikacji z iPadem za pośrednictwem iTunes (podczas uruchamiania z Xcode skopiowano puste foldery). Moim rozwiązaniem na razie jest po prostu umieszczenie fałszywego pliku tekstowego w każdym podfolderze, aby nie były już puste.

Powiązane problemy