NSBundle pathForResource равен NULL - PullRequest
       17

NSBundle pathForResource равен NULL

37 голосов
/ 16 октября 2010

Я создаю простое приложение с xcode и objc, и мне нужно загрузить NSDictionary из файла, но я не могу получить путь к файлу с помощью NSBundle:

NSString *l = [[NSBundle mainBundle] pathForResource:@"LoginStatuses" ofType:@"plist"];
NSLog(@"%@", l);

Когда язапустить этот код, я получаю это:

2010-10-16 10: 42: 42.42 Пример [5226: a0f] (ноль)

И я не знаю почему.

Я создал группу под названием Resources и там добавил LogingStatuses.plist: res

Ответы [ 8 ]

62 голосов
/ 16 октября 2010

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

Я не особо обращал внимание на опубликованный снимок экрана, но цель имеет тип " Инструмент командной строки " ... и, поскольку у них, конечно, нет связки [NSBundle mainBundle] возвращает ноль Это довольно обманчиво, что XCode не жалуется, что не может выполнить шаг « Copy Bundle Resources », он просто молча пропускает его.

Решение состоит в том, чтобы просто добавить новую цель типа " Приложение ", чтобы генерировалось пакетное приложение. Затем установите флажки Target Membership для всех источников и ресурсов для этой новой цели. Плистовые пути корректно разрешены.

52 голосов
/ 04 сентября 2012

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

  1. Выберите ваш проект
  2. Выберите цель
  3. Выберите вкладку "Фазы сборки"
  4. Откройте раздел с пометкой «Копировать ресурсы пакета»
  5. Перетащите файл .sqlite в этот раздел.

Теперь ваше приложение найдет эту базу данных sqlite по умолчанию.

22 голосов
/ 16 октября 2010

Действительно ли файл включен в цель (и будет ли он копироваться в комплект)? Есть два способа узнать / установить, что:

Первый способ: щелкните правой кнопкой мыши (или Cmd-клик) по файлу, выберите «Получить информацию». Затем перейдите на вкладку «Цели» и убедитесь, что файл проверен на наличие желаемых целей.

Второй способ: щелкните правой кнопкой мыши (или Cmd-часы) в браузере проекта в заголовке браузера файлов (он, скорее всего, будет читать «Группы и файлы»). Затем выберите «Целевое членство». Теперь у вас есть флажки рядом с каждым файлом, который может быть членом цели (например, файлы .m или ресурсы). Опять же, убедитесь, что флажок рядом с вашим файлом установлен.

5 голосов
/ 01 марта 2013

Так как я гуглил здесь, не нашел ответа, но потом открыл его сам, я оставлю это здесь ...

У меня было 2 файла: tray.png и tray@2x.png для Retina. Файлы были автоматически добавлены в «Копировать ресурсы комплекта».

Но:

[[NSBundle mainBundle] pathForResource:@"tray" ofType:@"png"];

не вернул файл, фактически скопированный в комплект! Причина была в следующем: IDE создала один файл TIFF tray.tiff (соединение tray.png и tray@2x.png), поэтому ... ofType:@"tiff"] помог! 1019 *

2 голосов
/ 16 мая 2016

Я столкнулся с этой проблемой сегодня в проекте командной строки.

К счастью, решение легко. Просто перейдите в «Фазы сборки», нажмите «+» и добавьте новую фазу «Копирование файлов». Выберите «Ресурсы» в качестве пункта назначения и добавьте все файлы, которые вы хотите использовать.

Теперь вы все еще можете использовать [NSBundle mainBundle], и оно должно работать!

2 голосов
/ 10 мая 2015

Моя проблема и решение очень похожи на проблемы Дмитрия Исаева. Я попытался получить путь для файла XIB. Оба вызова (в Swift) pathForResource ("myfile", ofType: "xib") и pathForResource ("myfile.xib", ofType: nil) не выполнены.

Решение состоит в том, чтобы использовать вместо этого расширение "nib":

pathForResource("myfile", ofType: "nib")
0 голосов
/ 17 августа 2011

Убедитесь, что вы правильно написали имя файла вашего ресурса.Я только что узнал, что трудный путь.:)

0 голосов
/ 08 мая 2011

Имя файла чувствительно к регистру на iPad. Вам нужно использовать маленькие буквы.

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