NSPopupButton在基于NSTableView的视图中:使绑定工作

Luk*_*kas 6 cocoa nstableview cocoa-bindings nspopupbutton

问题描述

我正在尝试实现一些应该简单且相当常见的东西:在绑定中填充NSPopupButton中的NSPopupButton填充NSTableView.Apple在其文档" 使用弹出菜单实现一对一关系"中为基于单元格的表描述了这一点,它看起来像这样:

在此输入图像描述

我不能让它适用于基于视图的表.无论我做什么,"作者"弹出窗口都不会填充.

我有两个数组控制器,一个用于表中的项目(Items),另一个用于作者(作者),两者都与我的核心数据模型中的相应实体相关联.我在我的单元格中绑定NSManagedPopup,如下所示:

  • 内容 - > 作者(控制器密钥:arrangeObjects)
  • 内容值 - > 作者(控制器密钥:arrangeObjects,模型密钥路径:名称)
  • Selected Object - > Table Cell View(Model Key Path:objectValue.author

如果我把弹出窗口放在桌子外的某个地方它工作正常(显然除了选择),所以我想绑定设置应该没问题.


我已经尝试过的事情

  1. 有人建议使用IBOutlet属性Authors数组控制器的解决方法,但这对我来说似乎也不起作用.

  2. 另一个SO问题中,建议子类化NSTableCellView并以编程方式建立所需的连接.我试过这个,但成效有限.

    如果我按如下方式设置绑定:

    - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
        NSView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
    
        if ([tableColumn.identifier isEqualToString:@"Author") {
            AuthorSelectorCell *authorSelectorCell = (AuthorSelectorCell *)view;
            [authorSelectorCell.popupButton bind:NSContentBinding toObject:self.authors withKeyPath:@"arrangedObjects" options:nil];
            [authorSelectorCell.popupButton bind:NSContentValuesBinding toObject:self.authors withKeyPath:@"arrangedObjects.name" options:nil];
            [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author" options:nil];
        }
    
        return view;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    弹出窗口确实显示了可能的作者列表,但当前选择始终显示为"无值".如果我加

    [authorSelectorCell.popupButton bind:NSSelectedValueBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];
    
    Run Code Online (Sandbox Code Playgroud)

    当前选择完全是空的.显示当前选择的唯一方法是设置

    [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];
    
    Run Code Online (Sandbox Code Playgroud)

    一旦我选择了不同的作者,它就会破坏,因为它会尝试NSString*为一个Author*属性分配一个.

有任何想法吗?

dav*_*idb 8

我有同样的问题.我已经在Github上展示了一个示例项目.

有人建议使用IBOutlet属性到Authors数组控制器的解决方法,但这对我来说似乎也不起作用.

这是这种方法的工作对我来说,这证明在样本项目.这个难题的缺失是,数组控制器的IBOutlet需要在提供TableView委托的类中.