Я хочу реализовать представление структуры без, используя привязки Cocoa.
Я проверил этот учебник среди некоторых других, и ни один из них не использует метод источника данных.
optional func outlineView(_ outlineView: NSOutlineView,
objectValueFor tableColumn: NSTableColumn?,
byItem item: Any?) -> Any?
Однако в документация Apple говорится:
While this method is marked as
@optional
in the protocol, you must implement this method if you are not providing the data for the outline view using Cocoa bindings.
Для учебников, похоже, он работает без этого метода. Но чем же тогда он хорош и как его предполагается использовать?
(Что меня смущает, так это то, что он читается так, как будто он должен возвращать объект данных, но ему передается параметр item
в качестве входных данных, который является является объектом данных в моем понимании.)
NSTableView
/NSOutlineView
и его документация в беспорядке.
Параметр byItem
функции outlineView(_:objectForValue:byItem:)
— это объект, представленный строкой, а возвращаемое значение — это объект, представленный ячейкой. Сравните tableView(_:objectValueFor:строка:), возвращаемое значение равно
An item in the data source in the specified table column of the view.
См. также свойство objectValue NSTableCellView
The object that represents the cell data.
The objectValue is automatically set by the table when using bindings or is the object returned by the NSTableViewDataSource protocol method tableView(_:objectValueFor:row:).
На самом деле при привязке содержимого табличного представления objectValue
является объектом строки.
NSOutlineView.h говорит о outlineView(_:objectValueFor:byItem:)
:
NOTE: this method is optional for the View Based OutlineView.
документация Apple
While this method is marked as @optional in the protocol, you must implement this method if you are not providing the data for the outline view using Cocoa bindings.
действителен только для представлений структуры на основе ячеек.
Если вы установите значение элементов управления в ячейках в outlineView(_:viewFor:item:)
, вам не нужно реализовывать outlineView(_:objectValueFor:byItem:)
.
Реализуйте outlineView(_:objectValueFor:byItem:)
, если вы хотите использовать свойство objectValue
представления ячейки. Например, при привязке значения элементов управления в ячейке и без привязки содержимого представления структуры.
См. также Программное заполнение табличного представления