Подтвердить что ты не робот

PathForResource возвращает null

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

Скопировали их в каталог "Поддерживаемые файлы" следующим образом:

enter image description here

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

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

pathForResource всегда возвращает null.

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

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

4b9b3361

Ответ 1

В целевом объекте Xcode "Сборка фаз" добавьте файл в разделе "Ресурсы копирования Bundle".

Ответ 2

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

Ответ 3

Предполагается ли ваш образ, что этот файл в какой-то папке?

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

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

Ответ 4

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

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

Ответ 5

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

если вы щелкнете файл (например, test.applescript) и у вас появится правильное меню Xcode open, вы увидите раздел "Target Membership". Убедитесь, что выбрана правильная цель (как в том, с которой вы используете script), и она выполнит ту же работу, что и добавление файла в разделе "Ресурсы копирования ресурсов"

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

[NSBundle mainBundle];

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

[NSBundle bundleForClass:[self class]];

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