Папка NSBundle не найдена на устройстве, но работает в симуляторе - PullRequest
5 голосов
/ 11 августа 2011

У меня действительно странная проблема с приложением для iPad, которое я пишу. При запуске я хочу скопировать папку, содержащую несколько других папок (которые являются пустыми) из комплекта приложения, в каталог Documents. Папка для копирования, называемая 'flds' (все строчные буквы), была добавлена ​​в проект Xcode 4 с помощью «Создание ссылок на папки для любых добавленных папок», и я проверил, что она фактически является частью файла .app после компиляции. (И что он не существует уже при попытке копирования.)

Я попытался добраться до папки 'flds' с помощью одного из следующих вызовов (все они работают):

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

Затем выполняется копирование с использованием метода copyItemAtPath:toPath:error: NSFileManager (или эквивалентного URL-адреса при использовании URL-адреса вместо строки пути).

Все эти стратегии отлично работают в симуляторе iPad и на устройстве iPad, за исключением следующего: когда я (успешно) собираю для распространения Ad Hoc, перетащите .app и .mobileprovision в iTunes, синхронизируем и затем запустите приложение на устройстве, система больше не думает, что папка 'flds' существует! Я пытался исследовать это много часов, но безуспешно. Опять же, я совершенно уверен, что он работает как в симуляторе, так и на устройстве, работающем из Xcode, но не при синхронизации через iTunes.

Идеи

Я обнаружил, что следующий вызов успешно получает путь к папке и после синхронизации приложения iPad через iTunes:

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

Однако, когда я использую этот путь, чтобы скопировать папку в ее новое местоположение в каталоге Documents, только сама папка и файл .txt в ней (который я вставил туда в качестве теста, на самом деле это не должно быть там) копируется, а не 6-7 пустых подпапок. Опять же, тот же шаблон показывает себя: работает как ожидалось как на симуляторе, так и на устройстве, запущенном из Xcode (папка 'flds' с файлом 'test.txt' и пустые подпапки успешно скопированы), но не при синхронизации через iTunes (только папка 'flds' с 'test.txt' копируются, а не подпапки). Это действительно предполагаемое поведение copyItemAtPath:toPath:error:? И почему он будет вести себя по-другому после синхронизации через iTunes?

1 Ответ

0 голосов
/ 18 августа 2011

В конце концов я понял, что copyItemAtPath:toPath:error: не будет копировать пустые папки, хотя я думаю, что это должно.И опять же, такое поведение происходило только после синхронизации приложения с iPad через iTunes (при запуске из Xcode оно копировало пустые папки).Мое решение пока состоит в том, чтобы просто поместить фиктивный текстовый файл в каждую подпапку, чтобы они больше не были пустыми.

...