The documentation for the NSTableViewDataSource protocol говоритЦель Tableview (_: objectValueFor: строка :)
Этот метод является обязательным
и если вы создаете новый NSTableViewDataSource компилятор просит вас предоставить этот метод, а также numberOfRows(in tableView: NSTableView)
.
До сих пор так хорошо. И если вы его предоставите, он сразу же будет вызван один раз для каждой строки ... но если вы его удалите, таблица, похоже, будет работать каждый бит так же, как и без него. Кажется, что в таблице, основанной на представлении, нет такого соединения: в методе NSTableViewDelegate tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int)
я возвращаю новые представления на основе массива содержимого моего источника данных, и если я вставлю кучу бессмысленных данных в objectValueFor: row
(до и включая возврат одной и той же строки - мои объекты таблицы не являются строками) не имеет никакого эффекта, потому что я устанавливаю значения моего NSTableViewCells в viewFor tableColumn:
.
Если я обработка изменения выбора (и все, что я хочу сделать с объектами), извлекая соответствующее значение из источника данных непосредственно (например)
func tableViewSelectionDidChange(_ notification: Notification) {
print(dataSource.allItems[tableView.selectedRow])
}
есть ли основания для реализации этого метода? Я не вижу никакой точки, где этот объект фактически используется, и он чувствует себя артефактом из сотовых таблиц.
Я не хочу нарушать свой код, оставив необходимый метод, но так как я собираюсь попробовать что-то странное и замечательное с помощью специального источника данных, я также не хочу чрезмерно усложнять свой код с помощью метода который называется, но результат которого кажется совершенно бессмысленным.
Смотреть [«Основанный на представлении NSTableView Basic to Advanced» от WWDC 2011] (https://developer.apple.com/videos/play/wwdc2011/120/). Это очень полезно для понимания табличных представлений на основе представлений и обсуждает метод tableView: objectValueForColumn: row: 'в этом контексте. Вы можете найти расшифровку сессии [здесь] (https://raw.githubusercontent.com/mayoff/wwdc-session-transcripts/86448e088823690110f1a7e98d2475781ff0c0fd/2011/120.vtt). –
Спасибо - я наблюдал это некоторое время назад, и соответствующий бит проскользнул мимо меня: «Необязательный метод - tableView: objectValueForTableColumn: row :. Раньше это требовалось с помощью NSCell, потому что оно было настроено на NSCell но теперь это необязательно », что прямо противоположно уведомлению компилятора и документации :-( –