Как загрузить изображение в каталог, отличный от NSBundle? - PullRequest
0 голосов
/ 15 июля 2010

СУПЕР ЖЕСТКИЙ ВОПРОС

Вот мой проект:

Я использую 3000 jpegs в iPhone Project.В обычной ситуации 3000 файлов загружаются в «NSBundle» (инкапсулированный с приложением) и затем загружаются на iPhone.Проблема в том, что приложение составляет около 500 мес.

Так что я хотел бы скопировать изображения в другой каталог (например, «Документы»), чем в пакете, а затем УДАЛИТЬ все jpeg из пакета.Моя идея состоит в том, что после первого запуска приложения, приложение будет только 2Mo, и следующие запуски будут очень быстрыми.


Моя первая идея была:

файл в Bundle: путь к файлу в файле Bundle. Место назначения: путь, куда я хочу поместить файл

 if([manager copyItemAtPath:fileInBundle toPath:fileDestination error:&error])
    if([manager removeItemAtPath:fileInBundle error:&error])

Конечно, я попытался 'moveItemToPath' ^^

Копия работает нормальноесли вы копируете за пределы «NSBundle», но удаление невозможно:

  NSFilePath = "/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CF5C0ED352/myLovelyApp.app/Main.jpg";
  NSUnderlyingError = Error Domain=NSPOSIXErrorDomain Code=1 "Operation could not be completed. Operation not permitted";

Очевидно, я проверяю, существует ли main.jpg с помощью «[manager fileExistsAtPath: fileInBundle]», и проверяю возможность удаления с помощью: «[manager isDeletableFileAtPath: fileInBundle] '(НЕТ!)

Итак, после этого я проверяю атрибуты разрешения POSIX для файла и каталога:
NSDictionary * whatPermissions = [атрибуты менеджераOfItemAtPath: fileInBundle error: & error];
NSLog (@ "File POSiX Permission:% @", [whatPermissions objectForKey: @ "NSFilePosixPermissions"]);

Я получаю 493 -> Chmod 755 -> read-Write-Exe / read-Exe / чтения Exe.Поэтому невозможно удалить или записать файл в этом NSBundle.

Я попытался принудительно переключить атрибут POSIX PERMISSION: [manager setAttributes: разрешение ofItemAtPath: fileInBundle error: & error] // установить разрешение posix на 511 (chmod777)

Но это не сработало.


Вторая идея: Итак, установка Xcode Building, возможно, была моим решением с флагом INSTALL PERMISSION:
'u + w, go-w, + rX '

, но я пробовал много возможностей, но ничего не получалось (может быть, я не нашел хорошего). Я попробовал:' u + rwx, go + rwx, a + rwx',' u + rw, go-rw, a + rwX '...

Но ничего не произошло. Я нашел' ALTERNATE_PERMISSIONS_FILES 'с помощью' ALTERNATE_MODE ', но, похоже, мне нужно заполнить список своими 3000JPG один за другим в параметрах XCode.И когда я попробовал всего 10 файлов.
Это не сработало.Я должен сказать, что я никогда не нахожу учебник или пост в блоге на эту тему.Так что, если вы знаете один из них.Пожалуйста, не стесняйтесь поделиться.

В Руководстве по системе сборки XCode НЕТ ПОМОЩИ !!!!


третья идея:

Я попытался изменить целевое назначение: я добавляю этап копирования файла в целевую систему.А затем поместите все изображение внутрь, но кажется, что оно не имеет никакого эффекта, и файл не загружается на iPhone.

КАК Я НАМ НАБРАТЬ СВОБОДНО 3000 ФАЙЛОВ ИЗОБРАЖЕНИЯ В СПРАВОЧНИКЕ И УДАЛИТЬ ЕГО.

Вот как выглядят каталоги iPhone:

"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number7_S.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number8_N.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number8_S.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number9_N.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number9_S.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Documents",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Caches",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Preferences",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Preferences/.GlobalPreferences.plist",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Preferences/com.apple.PeoplePicker.plist",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/tmp",

Я бы хотел переместить файл из NSBundle в каталог Documents.

СПАСИБО ЗА ПОМОЩЬ

Ответы [ 2 ]

0 голосов
/ 15 июля 2010

Моя идея заключается в том, что после первого запуска приложения оно будет работать только через 2 месяца, а следующие запуски будут очень быстрыми.

Значит, проблема в том, что для создания и развертывания версии этого приложения требуется много времени? Или ваша проблема в том, что на конечном устройстве запуск производственной сборки занимает много времени?

Последний Xcode действительно намного лучше с постепенным копированием только измененных ресурсов. Изменение одного изображения должно привести к одной быстрой копии и, конечно, не ко всем 3000 из них.

0 голосов
/ 15 июля 2010

Ваш NSBundle НИКОГДА не должен изменяться во время выполнения, так как приложение имеет кодовую подпись Apple. Если вы редактируете пакет, вы рискуете аварийно завершить работу приложения:

Это каталог комплектов содержащий само приложение. Поскольку заявка должна быть подписана, Вы не должны вносить изменения в содержимое этого каталога во время выполнения. Это может помешать вашему заявлению с запуском позже.

( Источник - Таблица 1-1 в разделе «Файловая система»)

Кроме того, меньший пакет не уменьшит время загрузки - основная причина наличия меньшего пакета заключается в ускорении загрузки из магазина приложений. Что вы всегда можете сделать, это разместить изображения где-нибудь, а затем загрузить изображения в каталог документов при первом запуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...