2010-08-18 4 views
1

Всякий раз, когда я делаю:Не удается создать NSImage?

xxx = [NSImage imageNamed:@"Package.png"]; 

ххх нагрузки, но это ширина и высота остаются 0. И всякий раз, когда я пытаюсь загрузить его в NSImageCell я получаю эту ошибку:

NSImageCell's object value must be an NSImage.

Может кто-то помочь мне вне? Раньше у меня никогда не было этой проблемы.

Редактировать: Извините, я пропустил этот бит. Поэтому, когда я делаю это в делетете источника данных, он не работает, и он показывает указанную выше ошибку после 'return cell; '.

NSImageCell* cell = [[NSImageCell alloc] init]; 
[cell setObjectValue:xxx]; // Using imageNamed doesn't help either 

Редактировать 2: Это становится отягчающим. Я не понимаю, что произошло, но изображение загружает высоту и ширину должным образом, но оно все еще жалуется, когда я добавляю его в NSImageCell.

alt text

ответ

6

Я вижу, поэтому в аспекте просмотра таблицы важны все.

В качестве источника данных ваша задача - вернуть (и получить в случае редактирования пользователя) значения объектов для ячеек в столбцах.

Но вы не возвращаете такое значение; вы возвращаете ячейку. Таким образом, вы пытаетесь установить ячейку изображения (созданную источником данных) в качестве значения ячейки изображения (существующей, принадлежащей столбцу).

В сообщении журнала указано, что вы уже установили ячейку столбца в качестве ячейки изображения, когда вы создали столбец, поэтому все, что вам нужно сделать, это изменить источник данных, чтобы всегда возвращать значение объекта для столбца, а не клетка. Для столбца изображения верните изображение. Для текстового столбца верните строку.

Обратите внимание, что NSTableView не работает, как UITableView, где UITableViewCells - это UIViews, и на экране имеется столько ячеек, сколько строк; в NSTableView каждый NSTableColumn получает одну и только одну ячейку данных и что одна ячейка используется для рисования этого столбца каждой строки. Ячейка рисует свое значение объекта, которое вы предоставляете ячейке, которое вы делаете, возвращая его (значение объекта) из вашего метода источника данных.

Документация по элементам управления (NSTableView - это вид NSControl), а их ячейки - Control and Cell Programming Guide.

+0

Спасибо за помощь. У меня был огромный разрыв с Cocoa, переключившись на разработку iPhone. Не понимал, что должен был вернуть значение, а не клетку. –

+0

Ага, хорошая добыча! – Wevah

1

Я думаю, это возвращение nil, в этом случае получение ширина/высота будет возвращать 0.

Try:

xxx = [NSImage imageNamed:@"Package"]; // the extension is not needed on the desktop or iOS 4 

и убедитесь, что изображение фактически скопирована в папку ресурсов вашего приложения!

+0

То же самое происходит :( –

+0

Ник Брукс: способ доказать эту теорию заключается в регистрации либо значения указателя ('% p'), либо описания ('% @ ')' xxx'. 'Nil' является указатель 0x0 и '% @' будут представлять описание 'nil' (например, возвращенное из сообщения' description', отправленное в 'nil') как« (null) ». –

+0

Указатель указывает на объект NSImage, который действителен Однако ширина и высота равны 0. И я не могу использовать его в NSTableView. –

0

Установив, что вы на самом деле получаете экземпляр NSImage (не nil), ширина и высота которого равны нулю, следующим шагом будет определение, почему это происходит.

  1. Можете ли вы открыть Package.png в режиме предварительного просмотра?
    1. Если да: какова его ширина и высота в окне предварительного просмотра? Имеет ли он информацию о разрешении (DPI или пиксель на метр)? Если да, то что это говорит?
    2. Если вы взломали свой пакет приложений, можете ли вы открыть эту копию Package.png в Preview?
  2. Когда вы регистрируете описание изображения, каков вывод?
  3. Каков результат регистрации массива изображений representations? (Это должно быть включено в собственное описание изображения, но я включаю его явно в случае, если оно не указано.)
  4. Что произойдет, если вы удалите папку сборки и заново построите?
+0

1. Да - Да 2. [см. Следующую статью] 3. Существует один элемент, который является самим изображением 4. После уборки ничего не меняется –

+0

+0

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

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