objective-c - 基于 View 的 NSTableView 使用绑定(bind)和委托(delegate)产生奇怪的结果

标签 objective-c macos osx-lion

我有一个 NSTableView,它的内容使用 filterPredicate 绑定(bind)到 arrayController。 tableView 是基于 View 的,因此它的委托(delegate)被设置为具有

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 

方法。我的行为很奇怪,这可能与我观察到即使 Controller 的 arrangedObjects 数量为 0 时也会调用此方法有关。此外,每次调用该方法时,它要求的行数就是总数数组 Controller 内容中的对象(相对于 arrangedObjects)。它认为可能是因为这个,当我设置请求的 cellView 的 objectValue 时使用

cellView.objectValue = [arrayController arrangedObjects] objectAtIndex:row];

它经常是错误的。有什么想法吗?

最佳答案

对于绑定(bind)的情况,objectValueForTableColumn 不是必需的。只是把我的头撞在墙上几分钟,然后以这条阻力最小的路径回来:

1) 将您的 NSOutlineView 内容绑定(bind)到 NSTreeController(arrangedObjects Controller 键)

2) 将每个 NSTableCellView 的 subview 绑定(bind)到封闭的 NSTableCellView(objectValue.foo,其中 foo 是目标字段的关键路径)

3) 为大纲 View 中的每一列设置标识符(我这样做是为了跟踪启动之间表格列的重新排序)

4) 确保每个 NSTableCellView 的标识符设置为 Automatic(或与表列相同)**这很重要,让我很困惑 **

5) 当你调用 makeViewWithIdentifier: 确保你传递了 tableColumn.identifier

这假设每个表列只有一种单元格 View 类型。否则,您需要在 makeViewWithIdentifier: 中为您想要的单元格 View 传递正确的标识符。

关于objective-c - 基于 View 的 NSTableView 使用绑定(bind)和委托(delegate)产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446195/

相关文章:

macos - Lion 更新删除了 'postgres' 用户。如何恢复?

ios - 如何在检测到自上次屏幕触摸后用户不活动/空闲时间时注销应用程序

ios - 提取请求,该请求返回coredata URL。为什么?以及如何访问托管对象?

macos - 带有预设行的静态 NSTableView

macos - Postgres : After importing production database (with replication) to my local machine, 我注意到正在从 macbook 发送和接收网络数据包

macos - 我的 Mac 应用程序在 OS X 10.7 上崩溃(来自测试人员报告)。当我的开发机器是 10.8 时,如何在 10.7 上进行测试?

ruby-on-rails - 打开新的终端窗口后,为什么需要使用 “rvm use default”?

ios - 使用 URLWithString NSURL 总是 nil

iOS:如何判断类型为 id 的对象是类还是协议(protocol)

java - LiClipse(适用于 Mac)是否包含自己的 JRE 副本?