Какао - проблема с этим кодом с помощью NSBundle - PullRequest
0 голосов
/ 02 ноября 2009

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

NSBundle *mb=[NSBundle mainBundle];


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


NSImage *image=[NSImage initWithContentsOfFile:fp];

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

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

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

Ответы [ 2 ]

5 голосов
/ 02 ноября 2009

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

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

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

NSImage* image = [NSImage imageNamed:@"topImage.png"];
4 голосов
/ 02 ноября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...