Использование NSTableView на Mac OS

Если вы делаете приложение которое будет реализовано и под iOS и под Mac OS будет лучше использовать одну и ту же Core Data модель (и вы даже можете использовать iCloud для обмена документами).

На iOS таблицы ограничены одним столбцом. Вы можете использовать navigation interface или master-detail controller design для получения детализированных данных.

В NSTableView строка представляется классом NSTableRowView, а столбец классом NSTableColumn. В одностолбцовом UITableView ячейки сами для себя и являются строками.

NSTableView позволяет ячейкам таблицы базировать свои вид на пользовательских представлениях, а не только ограничиваться NSCell. Класс NSTableCellView позволяет создавать наследованием от него view-based ячейки.

NSTableView позволяет использовать Core Data и биндинги, поэтому слишком много кода писать необязательно. Посмотрим как создать такое приложение:


Создадим новый проект типа Cocoa Application. Создадим Core Data модель данных:

Добавим array controller. Он будет управлять объектами самого верхнего уровня, например клиентами (customer). В свойствах контроллера заполним свойство Entity Name. Также надо отметить птичкой Prepares Content.

Потом для этого же контроллера массива нужно в свойства биндингов и привязать его к делегату приложения. Для свойства model key path надо установить значение managedObjectContext.

Далее добавим table view.

Кликните shift и ПКМ на первом столбце.

Далее для выбранного столбца надо открыть инспектор биндингов, далее в секции value надо привязать столбец к Customers с ключом контроллера arrangedObjects и model key path должен соответствовать атрибуту модели данных.

Также надо сделать и для второго столбца.

Далее добавим кнопку Add для добавления записей в table view. В инспекторе атрибутов свойство image установим на значение NSAddTemplate. Также добавим кнопку с NSRemoveTemplate.

Теперь надо нажать ПКМ на Add и перетащить курсор на Customers array controller и соединить его с действием Add. Аналогично надо сделать для кнопки Remove.