Не можете создать NSImage? - PullRequest
1 голос
/ 19 августа 2010

Всякий раз, когда я делаю:

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

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

Значение объекта NSImageCell должно быть NSImage.

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

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

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

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

alt text

Ответы [ 3 ]

6 голосов
/ 19 августа 2010

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

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

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

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

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

Документация по элементам управления (NSTableView является разновидностью NSControl)и их ячейки - Руководство по программированию для ячеек и управления .

1 голос
/ 19 августа 2010

Я предполагаю, что он возвращает nil, и в этом случае получение width / height вернет 0.

Попробуйте:

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

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

0 голосов
/ 19 августа 2010

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

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