我有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
中回复此问题。
它似乎工作正常,但似乎有点像黑客。
有更好的方法吗?
此外,我想要空列的原因是因为我想放置对象,例如不属于表视图引用的数组的按钮。
感谢您输入!
答案 0 :(得分:2)
这不是黑客攻击。这就是它的完成方式。您应该检查列标识符以确定要为其返回的对象值。您只想将该选择传递给Pizza对象,但是视图通常具有未在模型中体现的方面,因此控制器必须进行调解。如果你愿意,你可以在Pizza课程中覆盖-valueForUndefinedKey:但在我看来,这将是一个黑客攻击。顺便说一下,一旦检查了列标识符,就不必使用“跳过”。您可以轻松检查空标识符。