OS X 应用中的 NSTableView 选择

NSTableView selection in OS X app

所以我正在尝试学习如何编写一个简单的 OS X 应用程序,但我有点困惑。

我得到了这个 table 视图 - 将它连接到阵列控制器等已经很奇怪了。

它工作正常 - 目前,但我想在用户点击特定行时触发特定操作。

我在 Whosebug 上找到了关于 shouldSelectRow 方法的信息,但它似乎无法正常工作。

func tableView(tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
        switch tableView.identifier! {
        case "SetsTable":
            print("Selected row:", row)
            print("Objects after selection:", self.arrayController.selectedObjects)
            self.appsTableView.reloadData()
            return true
        default:
            return true
        }
    }

它在第一个 print 语句中显示正确的行,但是当涉及到第二个时,它似乎从完全不同的行中选择对象(如果我只有一行中有对象,它会显示一个空数组)

有谁知道这里的问题是什么以及如何正确显示所选行的对象?

是不是shouldSelectRow的问题?

当我在这个函数之外使用 self.arrayController.selectedObjects 时(例如,选择了该行,然后我点击了一个按钮调用以打印出 selectedObjects),它会正确显示。

名称中带有 'should' 的方法在其发生之前被调用,带有 'did' 的方法在其发生之后被调用。

tableView:shouldSelectRow: 在选择更改之前调用,因此委托可以拒绝新选择。

tableViewSelectionDidChange: 在选择更改后调用。 arrayController.selectedObjects 将是新的选择。

如果您想了解更多:Table View Programming Guide