Arhn - архитектура программирования

iPhone SDK: вложенные папки внутри основного пакета

в текущем проекте у меня есть несколько папок с подпапками, и они содержат изображения: 01.png, 02.png.

Folder1 / FolderA / f1.png Folder1 / FolderB / F1.png

Когда я компилировал приложение, я заглянул внутрь .app и заметил, что все изображения размещены на верхнем уровне без подпапок.

Ясно, что при попытке загрузить изображение это не работает:

NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "f1" ofType: @ "png" inDirectory: @ "Folder1 / FolderA"];

Но что еще более странно, при загрузке изображения «f1» изображение фактически загружает «F1».

UIImageView * imageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "f1.png"]];

У кого-нибудь есть идеи, как обойти эту проблему?

Есть ли возможность компиляции для создания папок в комплекте приложений?

TIA.


  • В чем проблема? Похоже, ваши изображения загружаются нормально. 08.03.2010
  • Проблема в том, что изображение f1.png не является F1.png. 08.03.2010
  • Я просто подумал, что в сборке f1 заменяется на F1, и поэтому его даже нет в папке .app. Следовательно, он не может отображать f1.png - его просто нет. 08.03.2010

Ответы:


1

Чтобы создать подпапки внутри пакета .app, вы должны установить флажок «Создавать ссылки на папки для любых добавленных папок», а не по умолчанию «Рекурсивно создавать группы для любых добавленных папок». Теперь в XCode ваша импортированная папка отображается синим, а не желтым цветом. Соберите и работайте, и вы должны увидеть папки в вашем .app файле.

08.03.2010
  • Идеально! Ошибка, которую я совершил, заключалась в том, что я перетащил структуру папок в папку ресурсов вместо того, чтобы нажимать опцию, выбирая «Добавить-› Существующие файлы »и затем выбирая радиокнопку« Создавать ссылки на папки для любых добавленных папок ». Тогда папка синяя. 08.03.2010
  • как я могу ссылаться на файлы в подпапках, созданных, как описано выше? pathForResource: ofType: inDirectory: у меня не работает. 13.12.2011
  • ок, разобрался сам - может кому это интересно: NSString *folderPath = [NSString stringWithFormat:@"%@/myfolder", [[NSBundle mainBundle] bundlePath]]; 13.12.2011

  • 2

    Прежде всего, папки, которые вы создаете в Xcode, представляют собой просто организационные структуры без каких-либо аналогов на уровне файловой системы. Другими словами, все папки, кроме папки «Классы», выравниваются на уровне файловой системы. Следовательно, даже если вы поместите файл изображения в следующее место в xcode, он все равно будет существовать на верхнем уровне файловой системы: f1 / f2 / f3 / f4 / f5 / image.png. Таким образом, в методе pathForResource не следует включать аргумент inDirectory.

    Что касается второй проблемы, mac osx не распознает имена файлов с учетом регистра. Следовательно, f1 и F1 эквивалентны mac osx и будут ссылаться на один и тот же файл. В этом легко убедиться, выполнив следующие 2 команды в сеансе терминала:

    touch f
    touch F
    

    вы заметите, что после этого существует только 1 файл: а именно f. Если поменять местами две команды, вы все равно получите один файл, но с именем F.

    07.03.2010
  • Изображения находятся в реальных папках в системе, а не только в XCode. Но Xcode не копирует папки, а только файлы png. 08.03.2010
  • Кажется, что происходит то, что изображения с именем f1.png затираются изображением F1.png. 08.03.2010
  • разве чувствительность к регистру не связана с форматом файловой системы при инициализации HD? HFS + с учетом регистра будет другим. 08.03.2010
  • Итак, насколько я понимаю, нет возможности создать подпапку в основном пакете, и поэтому единственное решение - добавить префикс к именам файлов, чтобы сделать их уникальными. 08.03.2010

  • 3

    эннуикиллер прав. Я думаю, вы можете организовать свои изображения через Finder в подпапке, а затем обновить местоположение изображения в XCode, щелкнув правой кнопкой мыши изображение и выбрав опцию «Получить информацию». Затем установите новый каталог.

    Ваше здоровье.

    07.03.2010
  • Конечно, но это все еще не создает папки внутри .app, когда он создается. 08.03.2010

  • 4

    Просто хотел добавить к ответу Мугунта, чтобы продолжить часть исходного вопроса, который пытался использовать:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"f1" ofType:@"png" inDirectory:@"Folder1/FolderA"];
    

    ... для доступа к файлам, добавленным с помощью ссылок на папки. Вышеупомянутый вызов pathForResouce будет работать на симуляторах, но не на реальных iPhone (будет возвращен nil), потому что они, похоже, не распознают подпапки в части метода inDirectory. Тем не менее, они распознают их в части pathForResource. Итак, можно перефразировать вышесказанное так, чтобы оно работало на iPhone:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"FolderA/f1" ofType:@"png" inDirectory:@"Folder1"];
    
    07.04.2012

    5

    Я следил за вашим ответом, но похоже, что все файлы хранятся в корне. Если я использую приведенный ниже код, чтобы получить полный путь

    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef url = CFBundleCopyResourceURL(mainBundle, CFSTR("About"), CFSTR("png"), NULL);
    UInt8 filePath[PATH_MAX];
    CFURLGetFileSystemRepresentation(url, true, filePath, sizeof(filePath));
    

    Получаю в результате: / Users / iosif / Library / Application Support / iPhone Simulator / 6.1 / Applications / 33FB4F79-999C-4455-A092-906A75226CDB / Arithmetics.app / About.png

    25.03.2013
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..