将 NSTableView 列标题绑定到数组
Binding a NSTableView column titles to an array
我正在尝试了解绑定的工作原理。我正在尝试将 NSTableView 的列绑定到包含列标题的数组。
当我在 Swift 游乐场上尝试代码时,出现 EXC_BAD_INSTRUCTION 错误。我做错了什么?
import AppKit
let titles = ["Title 1", "Title 2"]
let tv = NSTableView()
tv.addTableColumn(NSTableColumn())
tv.addTableColumn(NSTableColumn())
(tv.tableColumns as NSArray).bind(.title, to: titles, withKeyPath: "", options: nil)
I'm trying to understand how binding works.
我强烈建议阅读 Introduction to Cocoa Bindings Programming Topics。这假设您也熟悉以下主题:
- Key-Value Coding(又名 KVC)
- Key-Value Observing(又名 KVO)
- Value Transformer
I'm trying to bind columns of a NSTableView
to an array which contain the column titles.
Cocoa 绑定参考:
NSTableView
没有任何与列相关的绑定。最接近的是 content
绑定,但它是关于内容的,而不是列 header 标题等。
NSArray
& KVC:
没有办法使用 self[0]
作为获得第一个物品的关键路径,等等。有一些 collection operators 你可以在 NSArray
上使用,但没有像你这样的需要。
let titles = NSArray(arrayLiteral: "Title 1", "Title 2")
titles.value(forKeyPath: "self") // ["Title 1", "Title 2"]
titles.value(forKeyPath: "@count") // 2
当您阅读所有这些链接的文章时,您会想到这样的事情:
let titles = ["Title 1", "Title 2"]
tableView.tableColumns.enumerated().forEach { (idx, column) in
column.bind(.headerTitle, to: titles[idx], withKeyPath: "self", options: nil)
}
并且以这种方式使用绑定没有多大意义。只需设置标题:
let titles = ["Title 1", "Title 2"]
for (column, title) in zip(tableView.tableColumns, titles) {
column.headerCell.title = title
}
我正在尝试了解绑定的工作原理。我正在尝试将 NSTableView 的列绑定到包含列标题的数组。
当我在 Swift 游乐场上尝试代码时,出现 EXC_BAD_INSTRUCTION 错误。我做错了什么?
import AppKit
let titles = ["Title 1", "Title 2"]
let tv = NSTableView()
tv.addTableColumn(NSTableColumn())
tv.addTableColumn(NSTableColumn())
(tv.tableColumns as NSArray).bind(.title, to: titles, withKeyPath: "", options: nil)
I'm trying to understand how binding works.
我强烈建议阅读 Introduction to Cocoa Bindings Programming Topics。这假设您也熟悉以下主题:
- Key-Value Coding(又名 KVC)
- Key-Value Observing(又名 KVO)
- Value Transformer
I'm trying to bind columns of a
NSTableView
to an array which contain the column titles.
Cocoa 绑定参考:
NSTableView
没有任何与列相关的绑定。最接近的是 content
绑定,但它是关于内容的,而不是列 header 标题等。
NSArray
& KVC:
没有办法使用 self[0]
作为获得第一个物品的关键路径,等等。有一些 collection operators 你可以在 NSArray
上使用,但没有像你这样的需要。
let titles = NSArray(arrayLiteral: "Title 1", "Title 2")
titles.value(forKeyPath: "self") // ["Title 1", "Title 2"]
titles.value(forKeyPath: "@count") // 2
当您阅读所有这些链接的文章时,您会想到这样的事情:
let titles = ["Title 1", "Title 2"]
tableView.tableColumns.enumerated().forEach { (idx, column) in
column.bind(.headerTitle, to: titles[idx], withKeyPath: "self", options: nil)
}
并且以这种方式使用绑定没有多大意义。只需设置标题:
let titles = ["Title 1", "Title 2"]
for (column, title) in zip(tableView.tableColumns, titles) {
column.headerCell.title = title
}