(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 会显示正确的行数。但不幸的是,单元格不包含键 name
的 NSManagedObject
s 值的值。
我必须在我的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 不显示值的主要内容,如果未能解决你的问题,请参考以下文章