it-swarm.com.ru

pathForResource возвращает ноль

Я пытаюсь загрузить некоторые файлы .applescript в свой проект.

Скопируйте их в каталог «Supporting Files» следующим образом:

enter image description here

и попытался получить к ним доступ: 

NSBundle *bundle = [NSBundle mainBundle];
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]);

pathForResource всегда возвращает ноль.

Оба файла правильно импортированы в xcode. Целевое членство - мое приложение. Решения по схожим вопросам не помогли

Что я делаю неправильно?

40
dvcrn

В цели Xcode «Фазы сборки» добавьте файл в «Копировать ресурсы комплекта» ».

145
zaph

Для всех тех, кто все еще получает нулевой путь и файл добавлен в «Копировать ресурсы пакета», просто удалите файл из ресурсов Копировать пакет и затем добавьте снова.

5
Ahmad Ishfaq

Отличный ответ от Zaph выше, но я заметил, что когда я делал это, есть более быстрый путь, по крайней мере, в Xcode 6.1.

если вы щелкнете по файлу одним нажатием (например, test.applescript) и откроете правильное меню XCode, вы увидите раздел «Целевое членство». Убедитесь, что выбрана правильная цель (как в той, с которой вы используете скрипт), и она будет выполнять ту же работу, что и добавление файла в разделе «Копировать ресурсы комплекта».

Кроме того, не совсем актуально, но в случае, если вы загружаете из нескольких разных мест, или вы наследуете этот класс. Вы не должны действительно использовать 

[NSBundle mainBundle];

вместо этого используйте 

[NSBundle bundleForClass:[self class]];

Это означает, что вам не нужно беспокоиться о том, где вы находитесь, при вызове метода, он заберет ресурс у соответствующих элементов, связанных с целью, которую вы используете. Отлично подходит для библиотек и многоразовых звонков;) 

1
agovan

Ваше изображение предполагает, что этот файл в какой-то папке?

Попробуйте метод pathForResource:ofType:inDirectory: в этом случае:

NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files");
0
beryllium

В дополнение к тому, что сказал Zaph, убедитесь, что вы не работаете в режиме «Release».

Было время, когда я забыл изменить эту настройку обратно, и символы были удалены, что сделало NSBundle неспособным разрешить путь.

0
Jon