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

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

[[NSBundle mainBundle] URLForImageResource:]

Я также получаю нулевое значение. Я не понимаю, почему это происходит. Изображение находится в каталоге активов и в настройках проекта я установил его как ресурс бандла.


person ok404    schedule 30.07.2016    source источник
comment
[NSImage imageNamed:] предназначен для доступа к изображениям в вашем наборе приложений, а не в каталоге активов. Почему вы не можете поместить изображение в пакет приложений?   -  person Droppy    schedule 30.07.2016
comment
Я оптимизировал версии своего изображения для компьютеров Mac с сетчаткой и без нее, поэтому я подумал, что лучшим способом будет каталог активов. Конечно, я мог бы поместить изображения прямо в пакет приложений, но это тоже не работает.   -  person ok404    schedule 30.07.2016


Ответы (2)


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

Вместо этого вы можете запросить у пакета ресурсы изображений с определенным именем, например. чтобы найти изображение в пакете класса, запрашивающего изображение, вы должны:

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

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

person Jay    schedule 13.12.2017

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

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