Нет ничего плохого в том, чтобы смешивать подходы источника данных и привязок. Фактически, документация упоминает, что оба могут быть смешаны для большего контроля в сложных ситуациях. Это делается постоянно, поэтому не думайте, что вы делаете что-то не так.
Кроме того, точка порядка: метод -tableView:willDisplayCell:forTableColumn:row:
является частью протокола NSTableViewDelegate
, а не протокола NSTableViewDataSource
, поэтому он еще менее "грязен", чем вы думаете. : -)
В этой ситуации правильный способ состоит в том, чтобы создать выход для вашего контроллера массива (чтобы вы могли сообщать об этом) и запросить его для объекта в его -arrangedObjects
, индекс которого соответствует запрошенной строке. Любым другим способом, и вы боретесь с рамками.