Какао – проблема с этим кодом при использовании NSBundle
Вопрос
Было предложено использовать эту строку кода для вызова изображения из папки ресурсов/пакета проекта.Я также вижу, что именно так он используется во многих различных руководствах по веб-сайтам.
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 Чтобы получить больше информации.