(OS X) 以编程方式绑定的 NSTableView 不显示值

Posted

技术标签:

【中文标题】(OS X) 以编程方式绑定的 NSTableView 不显示值【英文标题】:(OS X) Programmatically bound NSTableView does not display values 【发布时间】:2014-06-23 15:48:26 【问题描述】:

我创建了一个带有 tableView 的 viewController 并将唯一列的标识符设置为“name”。然后我创建了一个arrayController,将它绑定到NSManagedObjectContext 并设置正确的实体名称。

当我现在加载 viewController 时,tableView 会显示正确的行数。但不幸的是,单元格不包含键 nameNSManagedObjects 值的值。

我必须在我的NSManagedObject 子类或 viewController(即 tableViews viewController)中实现什么?

我想向您展示一些代码,但我不知道这里有什么帮助,因为这更像是一个概念性问题......所以我将按照 cmets 的要求发布代码。

更新

这是我用来将 arrayController 绑定到 tableView 的代码:

[_tableView bind:NSContentBinding toObject:_arrayController withKeyPath:@"arrangedObjects.name" options:nil];

为了检查 tableView 得到了什么,我添加了这一行(在添加了名为“content”的属性之后):

[self bind:NSContentBinding toObject:_arrayController withKeyPath:@"arrangedObjects.name" options:nil];

在 setter 中,我得到了一个包含 NSString 实例的数组。但是tableView仍然没有显示任何值...

【问题讨论】:

这是基于视图的表格视图吗?单元格视图由什么组成?它是一个裸露的NSTextField 吗?是包含子视图的NSTableCellView 吗?如果是这样,它的textField 插座是否连接到适当的子视图?是自定义视图吗? 现在。这是一个基于单元格的 tableView。 【参考方案1】:

我终于用上了标准的NSTableViewDataSource协议:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView 
    return [[_arrayController arrangedObjects] count];

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
    return [[[_arrayController arrangedObjects] objectAtIndex:row] valueForKey:[tableColumn identifier]];

不过,我认为这是一个可靠的解决方案。我可能会沉迷于-bind:toObject:withKeyPath:options: 的想法。

【讨论】:

使用数据源方法很好。绑定并不总是最好的技术。对于基于NSCell 的表视图,您通常绑定表column(s),并且表视图本身根据列的绑定设置自己的绑定。 (除了列之外,您还可以自己绑定表格视图,这允许您覆盖或禁用某些自动行为。) 感谢您的详细评论。太好了,这澄清了很多问题。

以上是关于(OS X) 以编程方式绑定的 NSTableView 不显示值的主要内容,如果未能解决你的问题,请参考以下文章

在 OS X 上以编程方式启用“全键盘访问”

在 OS X 中以编程方式打开地图应用

以编程方式配置 Mac OS X MIDI

如何以编程方式修改 OS X 照片库?

以编程方式在 Mac OS X 上创建 PPTP ***

在 OS X 上以编程方式打开通知中心