Objective c 自定义NSPopUpButtonCell插座/绑定

Objective c 自定义NSPopUpButtonCell插座/绑定,objective-c,cocoa,cocoa-bindings,nspopupbuttoncell,Objective C,Cocoa,Cocoa Bindings,Nspopupbuttoncell,当通过绑定和NSArrayController填充表视图时,在表中实例化的自定义NSPopUpButtonCell有问题 弹出按钮单元格已创建,但当试图通过覆盖弹出按钮单元格的setMenuItem:item方法来访问插座时,该单元格为nil。 这是预期的行为吗。。? 是否应在创建时使用其他方法替换菜单 基本上,我需要插座链接回该文档窗口的控制器NSWindowController,以便在填充NSPopUpButtonCell菜单时,可以从自定义弹出按钮相应地自定义NSPopUpButtonCe

当通过绑定和NSArrayController填充表视图时,在表中实例化的自定义NSPopUpButtonCell有问题

弹出按钮单元格已创建,但当试图通过覆盖弹出按钮单元格的setMenuItem:item方法来访问插座时,该单元格为nil。 这是预期的行为吗。。? 是否应在创建时使用其他方法替换菜单

基本上,我需要插座链接回该文档窗口的控制器NSWindowController,以便在填充NSPopUpButtonCell菜单时,可以从自定义弹出按钮相应地自定义NSPopUpButtonCell菜单

使用绑定的解决方案会更好——但是当重写setObjectValue时:我可以看到它从来没有使用nil参数调用过。。不过,使用库存NSPopUpButtonCell会生成一个正确填充的弹出菜单。
另见

在NSTableView列中填充NSPopUpButtonCell不需要重写任何内容。需要知道的是,您在NSTableColumn上设置绑定,而不是在单元格本身上设置绑定。通常,您的xib中会有一个绑定到包含弹出窗口所有选项的NSArray的NSArrayController,然后您会选择带有弹出单元格的列并转到它的绑定。与此屏幕截图类似,请注意右侧inspector中填充的内容、内容对象和选定对象绑定:


如果你想要一个有效的例子,你可以看看我突然提出的另一个StackOverflow问题。关于让NSPopUpButtonCell使用NSAttributedString,有很多不相关的东西,但是xib中的绑定构成了一个工作示例,说明如何将NSTableColumn与一个弹出窗口绑定,弹出窗口的选项由绑定填充。

弹出按钮的菜单也由绑定填充吗?如果是这样,则不通过出口更新它,而是通过更新它绑定到的数组来更新它。它是-但是setObjectValue:从未使用有效内容调用,它始终为nil。请参见。那么如何从NSPopUpButtonCell中获取绑定值呢?也许我不理解您的情况-我真的不知道从弹出按钮单元格中获取值是什么意思。这些值来自一个数组,因此您应该从那里获取值。如果您能提供更多关于您尝试执行的操作的详细信息,这将非常有帮助。问题重新表述-我想问题是如何使用绑定填充弹出按钮单元格,即我们需要覆盖什么。感谢您提供的示例。然而,我一直在寻找一种方法,从NSPopUpButton的子类访问绑定到NSPopUpButton的值,并对其进行处理。如何处理取决于值的含义。如果您是指弹出菜单时出现在菜单中的选项,那么最简单的方法可能是将某些内容作为菜单的委托,并实现NSMenuDelegate方法menuedsupdate:。如果您需要为当前所选内容绑定的值,这会有点麻烦,但重写“-[NSPopUpButtonCell setMenuItem:]将使您有机会截取单元格将用于呈现其非弹出状态的从属菜单项。对-我猜MenuedSupdate:对于我试图实现的目标来说已经足够好了!让我感到奇怪的是,我不能只使用override setObjectValue:并将数组控制器提供给弹出菜单的所有对象获取到。是的,Cocoa绑定并不总是按照人们可能认为的方式工作。遗憾的是,源代码不是公开的,文档的编写也没有达到理解这些细节所必需的详细程度。这往往会让我们把繁琐的试错实验作为主要手段。总的来说,绑定文档的水平对于现代体系结构的支柱来说是可怕的