如何在NSTableView中获取所选行? view(atColumn:row:makeIfNecessary :)返回nil

时间:2017-07-09 09:01:59

标签: swift macos nstableview

我有一个NSTableview,其内容绑定到NSArrayController。 它的selectionIndexes绑定到arrayController的selectionIndexes。 并且此arrayController绑定到NSManagedObjectContext

因为arrayController的selectsInsertedObjects为真,所以当我将对象添加到NSManagedObjectContext时,将调用tableViewSelectionDidChange(_ notification: Notification)。我在这里设置了一个断点并在控制台中调试(我将tableview的委托设置为自己):

(lldb) po selectedRow
11
(lldb) po selectedCell()
nil
(lldb) po numberOfColumns
2
(lldb) po numberOfRows
12
(lldb) po view(atColumn: 0, row: 0, makeIfNecessary: false)
nil
(lldb) po view(atColumn: 0, row: selectedRow, makeIfNecessary: false)
nil

我可以在tableview中看到serval行。

但为什么po view(atColumn: 0, row: 0, makeIfNecessary: false)返回nil?

如何在委托方法tableViewSelectionDidChange(_ notification: Notification)中获取所选行?

1 个答案:

答案 0 :(得分:0)

我怀疑表格视图在更新其布局之前发布NSTableViewSelectionDidChangeNotification。因此,在创建子视图之前,您要在表视图中查询子视图。

这是makeIfNecessary参数的用途。试试这种方式:

po view(atColumn: 0, row: selectedRow, makeIfNecessary: true)