我有一个使用核心数据的程序,NSTableView
的列通过NSArrayController
绑定。这是一个问题,表列填充没有问题。我正在扩展表格以包含NSPopupButton
- 但是当添加按钮时会发生奇怪的事情。只需将按钮拖到列中,然后运行没有连接的程序或绑定到Popup
,所有其他列都不能正确填充 - 它们只显示默认的占位符文本。
思想?
我可以填充NSPopupButton
,但其他列只显示默认文本。如果我删除NSPopupButton
一切正常。
为什么其他列会出现问题?我尝试添加了CheckBox
并遇到了同样的问题。我在网上搜索过,但没找到答案。
我很感激任何想法/建议。
提前谢谢。
[编辑] ----
该表是基于视图的NSTableCellView
。
arrayController:
的TableView:
列:
NSPopupButton
:
值:绑定到主控制器,路径:catArrayController.arrangedObjects.name
主控制器:
IBOutlet:catArrayController 绑定到IB中的catArrayController
答案 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
的表视图中,您通常不会在设计时绑定表视图本身的内容(或选择索引或排序描述符)绑定。您将像完成一样绑定表列。在运行时,表视图将根据其列的绑定自动为其自己的内容,选择索引和排序描述符建立绑定。我怀疑在您的应用程序中发生了某种版本的此行为,这使得某些工作变得有意义。但是,我怀疑添加新列会破坏该系统。它首先在基于视图的表格视图中起作用,因此本质上是脆弱的。