NSPopupButton无法在NSTableview中工作

时间:2015-01-17 07:55:31

标签: objective-c cocoa core-data

我有一个使用核心数据的程序,NSTableView的列通过NSArrayController绑定。这是一个问题,表列填充没有问题。我正在扩展表格以包含NSPopupButton - 但是当添加按钮时会发生奇怪的事情。只需将按钮拖到列中,然后运行没有连接的程序或绑定到Popup,所有其他列都不能正确填充 - 它们只显示默认的占位符文本。

思想?

我可以填充NSPopupButton,但其他列只显示默认文本。如果我删除NSPopupButton一切正常。

为什么其他列会出现问题?我尝试添加了CheckBox并遇到了同样的问题。我在网上搜索过,但没找到答案。

我很感激任何想法/建议。

提前谢谢。

[编辑] ----

该表是基于视图的NSTableCellView

arrayController:

  • 绑定到实体名称
  • 绑定到主控制器的参数; key path:managedObjectContext

的TableView:

列:

  • 值:绑定到arrayController,键路径:名称,年龄等......

NSPopupButton

值:绑定到主控制器,路径:catArrayController.arrangedObjects.name

主控制器:

IBOutlet:catArrayController 绑定到IB中的catArrayController

1 个答案:

答案 0 :(得分:1)

使用基于视图的表视图,您可以将表视图的Content绑定绑定到数组控制器。您执行绑定列的值绑定。来自Table View Programming Guide for Mac: Populating a Table View Using Cocoa Bindings

  

注意:在基于NSView的表中,您将表视图的内容绑定到数组控制器的arrangedObjects。这与您使用基于NSCell的表格时使用的技术不同。

该绑定会导致每个单元格视图将其objectValue属性设置为与该行对应的对象(如果它具有此类属性)。请注意,单元格视图不会获取特定于列的值。一行中的所有单元格都具有相同的值。

由于您的单元格视图为NSTableCellView,因此它们具有objectValue属性。然后,单元格视图的子视图应将其Value绑定绑定到单元格视图,并使用通过objectValue到特定属性(名称,年龄等)的键路径。

在旧的基于NSCell的表视图中,您通常不会在设计时绑定表视图本身的内容(或选择索引或排序描述符)绑定。您将像完成一样绑定表列。在运行时,表视图将根据其列的绑定自动为其自己的内容,选择索引和排序描述符建立绑定。我怀疑在您的应用程序中发生了某种版本的此行为,这使得某些工作变得有意义。但是,我怀疑添加新列会破坏该系统。它首先在基于视图的表格视图中起作用,因此本质上是脆弱的。