Какао – проблема с этим кодом при использовании NSBundle

StackOverflow https://stackoverflow.com/questions/1659407

  •  11-09-2019
  •  | 
  •  

Вопрос

Было предложено использовать эту строку кода для вызова изображения из папки ресурсов/пакета проекта.Я также вижу, что именно так он используется во многих различных руководствах по веб-сайтам.

NSBundle *mb=[NSBundle mainBundle];


NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"];


NSImage *image=[NSImage initWithContentsOfFile:fp];

ОДНАКО я получаю следующее предупреждение:

NSImage может не ответить на +initWithContentsOfFile+

Документация NSImage показывает, что initWithContentsOfFile на самом деле является методом, который должен работать.Что мне здесь может не хватать?

Это было полезно?

Решение

Вам не хватает +alloc

NSImage* image = [[NSImage alloc] initWithContentsOfFile:fp];

Вы также можете использовать +imageNamed:, который извлекает изображения из вашего основного пакета.

NSImage* image = [NSImage imageNamed:@"topImage.png"];

Другие советы

initWithContentsOfFile: — это метод экземпляра, но вы отправляете это сообщение в класс NSImage.Вам необходимо отправить его в экземпляр — точнее, в только что выделенный экземпляр.

Вот где alloc приходит в.Это метод класса, который выделяет экземпляр, который вы затем немедленно отправляете init… сообщение (как показал Даррен).

Не забудьте освободить экземпляр, когда закончите с ним.Обычно я автоматически освобождаю экземпляр сразу после его запуска;затем Cocoa выпустит для меня экземпляр в подходящее время.См. Руководство по программированию управления памятью для Cocoa Чтобы получить больше информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top