Какао - проблема с этим кодом с помощью NSBundle

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

NSBundle *mb=[NSBundle mainBundle];


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


NSImage *image=[NSImage initWithContentsOfFile:fp];

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

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

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

2 ответа

Решение

Вы скучаете по +alloc

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

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

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

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

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

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

Другие вопросы по тегам