Как найти путь к существующему файлу текстовых ресурсов в комплекте? [Дубликат]

Есть 2 решения: 1: изменить настройки изображения:

Build Action = Content
Copy to output directory = Copy if newer
Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"

2: при использовании приложения вместо siteoforigin в исходном пути, у вас есть возможные пути:

a) Изображение будет в SubFolder под названием «Ресурсы», а файл .exe будет небольшим

Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Content
Copy to output directory = Copy if newer

b) Изображение будет включено в .exe, и никакая подпапка с файлом изображения не будет существовать

Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Resource
Copy to output directory = Copy if newer
36
задан Ev. 10 March 2015 в 04:30
поделиться

8 ответов

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

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

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

60
ответ дан DarkDust 23 August 2018 в 01:39
поделиться
  • 1
    +1 это, наверное, так, я тоже был укушен – Nick Moore 16 October 2010 в 17:29
  • 2
    спасибо за ответ, но файлы, кажется, добавлены в цель - & gt; grab.by/6TG4 – patrick 16 October 2010 в 17:44
  • 3
    @Patrick: Ваша цель называется MetwitApi ... означает ли это, что вы используете этот пакет в каком-то другом приложении? Если это так, то mainBundle будет неправильным ... вместо этого попробуйте bundleForClass:[SomeClassFromApi class]. – DarkDust 16 October 2010 в 18:09
  • 4
    Обычно я этого не делаю, но хорошо. Вы можете найти мой адрес электронной почты внизу моей домашней страницы. – DarkDust 16 October 2010 в 18:20
  • 5
    @Patrick: Быстрое слово об этикете. Люди добровольно проводят время на сайтах и ​​списках рассылки, чтобы помочь сообществу так же, как и люди. Это не поможет будущим посетителям сайта, которые находят ваш вопрос, потому что у них была такая же проблема, когда вы публично публиковали, а затем снимали вещи в автономном режиме. Это также считается плохой формой для «защелки», к человеку с бременем в одиночку помогая вам в вашей проблеме. Пусть сообщество поможет, поставив вопрос и ответ в сообществе. Таким образом, вы получите хорошую репутацию и поможете помощникам сделать то же самое. – Joshua Nozzi 16 October 2010 в 18:44
  • 6
    Большое спасибо, это сработало! : D – patrick 16 October 2010 в 20:01
  • 7
    Я также использую тип проекта Command-line Tool, и я не могу загрузить файл с NSBundle pathForResource. Должен ли я переключиться на тип проекта Cocoa Application? Я не уверен, что следую вашему предложению добавить новую цель Application; вы хотите добавить новую цель в существующий проект инструмента командной строки? – raffian 24 September 2012 в 00:13
  • 8
    Да, я хотел добавить новую цель (типа Application) в ваш существующий проект. Обычный инструмент командной строки - это просто исполняемый файл без пакета. Любые ресурсы, которые вы добавляете в свою целевую программу Command-line Tool , просто игнорируются (но Xcode не предупреждает вас об этом). – DarkDust 24 September 2012 в 11:04
  • 9
    Цели инструмента командной строки по-прежнему могут связывать файлы с помощью NSBundle pathForResource. Вам нужно указать приложению скопировать файлы (файлы) в каталог продуктов при его создании. Перейдите на вкладку «Сборка фаз», нажмите «Добавить фазу сборки» и выберите «Добавить файлы копирования». Затем просто перетащите нужные файлы. – capikaw 19 August 2013 в 22:12
  • 10
    отличный ответ @DarkDust – Jagveer Singh 10 September 2015 в 07:13
60
ответ дан DarkDust 5 November 2018 в 23:19
поделиться

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

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

Но:

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

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

5
ответ дан Dmitry Isaev 23 August 2018 в 01:39
поделиться
  • 1
    Ура! Тоже самое! Благодарю. – Raffael 15 March 2013 в 19:58
  • 2
    Для отключения этого параметра существует функция сборки, называемая Combine high resolution artwork / COMBINE_HIDPI_IMAGES. – Klaas 9 July 2015 в 10:11

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

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

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

2
ответ дан edwardmp 23 August 2018 в 01:39
поделиться
  • 1
    Это решило мою проблему после обновления до Xcode 8.1. *** Предупреждение. Нет инструментов командной строки для Xcode 8.1 при установке в OS X 10.1.66. – Ed of the Mountain 31 October 2016 в 19:27
  • 2

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

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

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

51
ответ дан fawsha1 23 August 2018 в 01:39
поделиться
  • 1
    Я обнаружил, что Xcode автоматически добавляет определенные типы файлов на фазу Copy Bundle Resources и оставляет других. Например, файлы .html (вместе с .strings, .png и т. Д.) Добавляются автоматически, но .js файлов нет. – dave 6 August 2014 в 18:21
  • 2
    Добавьте к списку, что xcode автоматически не является .epub-файлами – okysabeni 19 June 2015 в 21:27
  • 3
    Xcode также не включает сценарии оболочки в ресурсы автоматически. – iamseiko 9 August 2016 в 02:26
  • 4
    Это работает, если я создаю свой проект с помощью Xcode, но не используя swift build. Любое решение? – Jay Wong 8 February 2018 в 23:13
  • 5
    @ JayWong4 Что происходит с помощью команды build? Вы получаете сообщение об ошибке? – fawsha1 9 February 2018 в 03:22

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

0
ответ дан gonzobrains 23 August 2018 в 01:39
поделиться

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

1
ответ дан János 23 August 2018 в 01:39
поделиться
  • 1
    Ну, согласованный корпус. Не обязательно «маленький», но да. Это была проблема для меня. :) – Ev. 10 March 2015 в 05:18

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

Решение заключается в использовании расширения «nib», вместо этого:

pathForResource("myfile", ofType: "nib")
2
ответ дан Tony 23 August 2018 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: