Ответ 1
В целевом объекте Xcode "Сборка фаз" добавьте файл в разделе "Ресурсы копирования Bundle".
Я пытаюсь загрузить некоторые файлы .applescript в свой проект.
Скопировали их в каталог "Поддерживаемые файлы" следующим образом:
и попытались получить к ним доступ:
NSBundle *bundle = [NSBundle mainBundle];
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]);
pathForResource всегда возвращает null.
Оба файла правильно импортированы в xcode. Целевое членство - мое приложение. Решения от подобных вопросов на самом деле не помогли
Что я делаю неправильно?
В целевом объекте Xcode "Сборка фаз" добавьте файл в разделе "Ресурсы копирования Bundle".
Для всех тех, кто все еще получает нулевой путь, и файл добавляется в "Копировать ресурсы Bundle", просто удалите файл из "Ресурсы копирования Bundle" и добавьте снова.
Предполагается ли ваш образ, что этот файл в какой-то папке?
Попробуйте pathForResource:ofType:inDirectory:
метод в этом случае:
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files");
В дополнение к тому, что сказал Саф, убедитесь, что вы не работаете в режиме "Release".
Было время, когда я забыл изменить эту настройку, и символы были разделены, что делает NSBundle неспособным разрешить путь.
Отличный ответ от Zaph выше, но я заметил, когда я делал это быстрее, по крайней мере, в Xcode 6.1.
если вы щелкнете файл (например, test.applescript) и у вас появится правильное меню Xcode open, вы увидите раздел "Target Membership". Убедитесь, что выбрана правильная цель (как в том, с которой вы используете script), и она выполнит ту же работу, что и добавление файла в разделе "Ресурсы копирования ресурсов"
Кроме того, это не совсем актуально, но если вы загружаетесь из нескольких разных мест или наследуете этот класс. Вы не должны использовать
[NSBundle mainBundle];
вместо этого используйте
[NSBundle bundleForClass:[self class]];
Это означает, что вам не нужно беспокоиться о том, где вы находитесь в вызове метода, и он берет ресурс из соответствующих элементов, связанных с целевой вами целью. Отлично подходит для создания библиотек и многократных вызовов;)