2010-06-16 5 views
1

Только что начал исследовать какао, так что в целом нум.Кнопка какао не отображает изображение

Я написал очень простую игру. Задайте его в интерфейсе Builder и получите его работу отлично.

Он содержит несколько кнопок, и теперь я пытаюсь получить кнопки для отображения изображений.

Для начала я пытаюсь получить изображение, отображаемое только на одной из кнопок, которая называется tile0.

Файл изображения (это не что иное, как зеленый квадрат на данный момент, но я просто пытаюсь получить эту работу до того, как я попытаюсь сделать что-нибудь более экзотичное) сидит в том же каталоге, что и файл класса, который контролирует игру.

У меня есть следующий код, сидя в моем wakeFromNib метод:

NSString *myImageFileName = [[NSString alloc] init]; 
myImageFileName = @"greenImage.jpg"; 
NSImage *myImage = [[NSImage alloc] initByReferencingFile:myImageFileName]; 
[tile0 setImage: myImage]; 

Беда в том, что игра работает нормально, но изображение не отображается на кнопке.

Есть ли кто-нибудь, кто мог бы любезно сказать мне, что я делаю что-то явно неправильно?

Большое спасибо.

ответ

1

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

Я никогда не использовал initByReferencingFile, я обычно использую только imageNamed:. Пример использования imageNamed here.

+0

И если вы используете imageNamed :, вам нужно поместить изображение в каталог ресурсов вашего приложения. Вы не можете просто поместить изображения рядом с источником и ожидать, что двоичный файл обнаружит его. – JWWalker

+1

Отлично. imageNamed работал отлично. Большое спасибо за вашу помощь. Очень признателен. У меня есть книги, и я использую документы как можно больше, но иногда спрашивать других - это единственное, что нужно сделать :-) –

+1

Причина, по которой 'initByReferencingFile:' не работает, заключается в том, что 'initByReferencingFile:', как и его кузен 'initWithContentsOfFile:', принимает имя пути. Вы передали имя файла, которое работает как относительный путь, но это не сработало, потому что в текущем рабочем каталоге нет такого файла (который по умолчанию относится к корню файловой системы, т. Е. Нет /greenImage.jpg). 'imageNamed:' работает, потому что (а) он специально хочет имя файла (с расширением или без него), и (б) он ищет файл с этим именем в каталогах ресурсов загруженных пакетов, а не в текущий рабочий каталог. –

Смежные вопросы