Задал этот вопрос довольно поздно, и я подумал, что это интересная проблема дизайна.
Если вы не взломали это или вам не понравилось ни одно из ваших решений:
Я бы предложил написать подкласс NSCollectionViewItem, который наблюдает путь (ы) ключа self.representedObject и обновляет его представление и подпредставления при изменении объекта модели.
NSCollectionViewItem - это NSViewController, который подразумевает, что он должен отвечать за управление своими представлениями. Вы можете уважать это, имея слой представления, с которым он работает, в виде пользовательского представления своего объекта модели, хранящегося в его свойстве presentObject. Таким образом, наблюдая за всеми необходимыми свойствами модели с помощью KVO, вы должны иметь удобное место для вызова всех операций представления, касающихся «рендеринга» модели. На этом этапе вы должны иметь полный контроль над тем, хотите ли вы работать с NSView API или CALayer API.
Исходя из того, насколько сложен ваш вид элемента-прототипа, размера и изменчивости набора элементов, требования пользовательского интерфейса к «живости» и других факторов, вы можете уйти с очень грубым наблюдением или вам нужна очень мелкозернистая модель - надеюсь, вы привыкли работать с KVO API!
Я также хотел бы услышать, какой выбор вы сделали в итоге.