【问题标题】:(OS X) Programmatically bound NSTableView does not display values(OS X) 以编程方式绑定的 NSTableView 不显示值
【发布时间】: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。

标签: objective-c macos core-data nstableview nsmanagedobject


【解决方案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),并且表视图本身根据列的绑定设置自己的绑定。 (除了列之外,您还可以自己绑定表格视图,这允许您覆盖或禁用某些自动行为。)
  • 感谢您的详细评论。太好了,这澄清了很多问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多