我有一个 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/