2016-07-30 2 views
1

Я пытаюсь создать простую заставку. Первое, что я делаю, - загрузить изображение из каталога активов с помощью метода [[NSImage imagedNamed:]], который возвращает значение nil, что означает, что он не может найти изображение. Когда я пытаюсь загрузить изображение непосредственно из пакета с помощью метода [[NSBundle mainBundle]URLForImageResource:], я также получаю нулевое значение. Я не понимаю, почему это происходит. Изображение находится в каталоге активов и в настройках проекта, которые я установил в качестве ресурса пакета.Почему я не могу загрузить изображение, которое находится в каталоге активов?

+0

'[NSImage imageNamed:]' предназначен для доступа к изображениям в вашем приложении, а не в каталоге активов. Почему вы не можете поместить изображение в свой комплект приложений? – Droppy

+1

У меня есть оптимизированные версии моего изображения для сетчатки и макросов не сетчатки, поэтому я думал, что лучший способ - это каталог активов. Конечно, я мог бы разместить изображения непосредственно в комплекте приложений, но это тоже не работает. – ok404

ответ

0

После того, как я продолжил поиск в Интернете, я узнал, что заставка выполнена как какой-то плагин, и, загрузив основной пакет, я загрузил пакет системных предпочтений, что означает, что я не могу получить свой ресурс, загрузив основной пакет, вместо этого я должен загрузить пакет с помощью bundleIdentifier или с путём, в котором сохраняется пакет. Так что мой код будет выглядеть так:

NSBundle*bundle=[NSBundle bundleWithIdentifier:@"com.myname.APOD"]; 
NSImage*image=[[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"appimage" ofType:@"png"]]; 
0

Вы может доступ к изображениям в каталогах активов по названию, но не используя imageNamed: метода NSImage -

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

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSImage *myImage = [bundle imageForResource:@"MyImageName"]; 

где MyImageName относится к имени, присвоенного изображение в каталоге активов.