2011-06-25 6 views
3

Если у меня есть пакет, содержащий класс и некоторые ресурсы, используемые этим классом. Если я загружаю класс из пакета, как я должен загружать ресурсы (которые находятся в пакете, где я загружал класс из этого класса) в этом классе?Загрузка ресурсов из другого пакета

Предположим, что я хочу загрузить изображение внутри моего объекта, созданного из класса, загруженного из пакета. Если я

NSImage *image = [NSImage imageNamed:@"myImage"]; 

Будет ли загрузить изображение, которое находится внутри пучка, откуда я загрузил класс от? или он будет выглядеть в комплекте приложения, которое загрузило пакет с классом и ресурсами?

ответ

3

Этого метод ищет названные изображения в нескольких местах, возвращая первое изображение он находит соответствие данного имени. Порядок поиска как следующим образом:

  1. Поиск объекта, имя которого установлено явно с помощью SetName: метода и в настоящее время находится в кэше изображения.
  2. Поиск основного пакета для приложения для файла, имя которого соответствует указанной строке. (Для информации о том, как расслоение искали, смотрите в разделе «„Доступ к пачкой в ​​ Contents“» в Bundle Программирование Guide.)
  3. Поиск Application Kit рамки для общего изображения с указанным именем . При поиске файлов в комплекте приложений это лучше (но не обязательно), чтобы включить расширение имени файла в имени . (Link)
+1

Так как же вы загрузите его в этом случае? 1) не применяется, потому что изображение ранее не загружалось (оно не находится в кеше) 2) не применяется, поскольку оно находится в отдельном пакете, а не в основном комплекте 3) это не инфраструктура appkit. – thealch3m1st

+1

Создайте экземпляр 'NSBundle'. Получить путь к файлу. Загрузите изображение. –

+0

Но у меня есть объект, который создается из класса, загруженного из этого пакета. Создать экземпляр NSBundle того же набора, в котором находится класс, и загрузить изображение из этого пакета? Если класс внутри пакета, как загрузить пакет, содержащий класс внутри метода, определенного в этом классе? – thealch3m1st

0

Вы можете использовать метод +bundleForClass: классовой NSBundle, чтобы получить ссылку на пачку для конкретного класса.

Затем вы можете использовать метод ‑pathForImageResource:NSBundle, чтобы получить путь к изображению и создать NSImage с указанным путем.

5

На OS X 10.7+ делают это сделать:

NSBundle *otherBundle = [NSBundle bundleWithIdentifier: @"com.company.otherapp"]; 
NSImage *imageFromOtherBundle = [otherBundle imageForResource: @"imageName"]; 
Смежные вопросы