У меня есть NSImageCell
столбец таблицы, чья valuePath
связана с путем, предоставленным моим объектом через NSArrayController
.
My NSTableViewDelegate
реализует метод -tableView:heightOfRow:
, чтобы иметь переменную высоту строки. Мне нужно рассчитать высоту строки на основе размеров изображения, отображаемого в вышеупомянутом столбце.
Прямо сейчас я получаю ужасную производительность, так как я вызываю [[NSImage alloc] initWithContentsOfFile:<path>]
для каждой итерации. Есть ли способ загрузить представление изображения, которое каждый NSImageCell
уже извлек для отображения?
Я доволен производительностью, продемонстрированной с помощью привязки valuePath
, и не хотел бы кэшировать каждое изображение самостоятельно, так как их будет много, каждое несколько большое.
Я попробовал метод NSTableColumn
-dataCellForRow:
, который звучал идеально, за исключением того, что возвращаемая ячейка возвращает objectValue
, который, похоже, является последней строкой, для которой были загружены данные.
Обновление (решение неудовлетворительное)
Я нашел примерное решение (опубликовано одновременно ниже), но оно кажется неуклюжим (и я уже видел, как оно проваливалось в случайные, невоспроизводимые времена), и я все еще ищу лучшее решение.
Я использую метод делегата -tableView:willDisplayCell:forTableColumn:row:
, чтобы заполнить изменяемый словарь ключом [[cell objectValue] size]
(размер изображения), связанным с уникальным идентификатором представляемого объекта. Затем в вызове -tableView:heightOfRow:
я ищу обложку из этого словаря. Мне нужно позвонить [tableView noteNumberOfRowsChanged]
после загрузки данных, иначе словарь не будет заполнен должным образом для начального экрана данных.