NSTableview列标识符

时间:2014-05-17 04:29:43

标签: macos cocoa nstableview

我有NSTableview,在此表格视图中,我使用objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row填充列。

我想要一个未填充的列。如果我放置一个没有标识符的列或一个与密钥不匹配的标识符,则会因为不符合密钥编码而收到错误。

现在我为避免这种情况所做的是添加一个名为' skip'的列,我在我的代码中检查这个条件...

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    Pizza* pizza  = [pizza objectAtIndex:row];


    NSString* identifier = [tableColumn identifier];

    if ([identifier isEqualToString:@"skip"]) {
        return nil;
    }

    return [pizza valueForKey:identifier];
}

我也必须在setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row中回复此问题。

它似乎工作正常,但似乎有点像黑客。

有更好的方法吗?

此外,我想要空列的原因是因为我想放置对象,例如不属于表视图引用的数组的按钮。

感谢您输入!

1 个答案:

答案 0 :(得分:2)

这不是黑客攻击。这就是它的完成方式。您应该检查列标识符以确定要为其返回的对象值。您只想将该选择传递给Pizza对象,但是视图通常具有未在模型中体现的方面,因此控制器必须进行调解。如果你愿意,你可以在Pizza课程中覆盖-valueForUndefinedKey:但在我看来,这将是一个黑客攻击。顺便说一下,一旦检查了列标识符,就不必使用“跳过”。您可以轻松检查空标识符。