tableView:objectValueForTableColumn:row:应该返回什么?(涉及IT技术)

5

我是一个新手,正在学习在OSX上使用Cocoa编程。之前我从事iOS编程。我发现NSTableView编程与UITableView编程相似。所以我正在尝试实现NSTableViewDataSource协议的一部分,但我不知道如何从tableView:objectValueForTableColumn:row:方法中返回一个简单的字符串,以便在行和列上显示。我已经搜索过谷歌,浏览了苹果文档,但找不到任何有用的信息。该方法返回类型为"id",这也没有帮助。谢谢。

2个回答

11
你返回的对象值取决于:a)对于你的模型来说什么是有意义的,以及b)你如何设置表视图单元格视图。我假设你正在使用视图型表视图,因为这是现代的方式。因此,表视图会获取从“-tableView:objectValueForTableColumn:row:”返回的对象值,并尝试将其设置在单元格视图上。它会检查单元格视图是否实现了“-setObjectValue:”,如果是,则调用它并传递从数据源返回的对象值。那么,哪些视图支持“-setObjectValue:”,并且当设置该方法时会发生什么呢?好吧,任何继承自“NSControl”的视图都有这样的方法,并显示并且可能允许用户编辑值。这样一个控件的常见例子是“NSTextField”。因此,如果你的单元格视图是“NSTextField”或其他控件,你的数据源可以返回一个“NSString”,这已经足够了。如果控件有格式化器对象(“NSFormatter”的子类实例),则您的数据源可以返回其他类型的对象,例如“NSNumber”或“NSDate”,而格式化器将把它转换为文本并从文本中转换回来。如果你的单元格视图是“NSTableCellView”,那么该类也会响应“-setObjectValue:”。因此,表视图将使用从数据源返回的对象值调用它。但是,“NSTableCellView”本身并没有对对象值进行任何操作,它只是保存它。然后,你可以让子视图通过“objectValue”属性绑定到它。它们将通过绑定获取其值。在这种情况下,数据源可以返回任意对象。子视图将通过选择适当的键路径来显示和编辑该对象的特定属性来显示它们。例如,如果你的应用程序操作“Employee”对象,则你的数据源可以返回该行的“Employee”,“NSTableCellView”将保存对它的引用,而单元格视图中的文本字段可以通过绑定到具有键路径“objectValue.name”的“NSTableCellView”来显示员工的姓名。(你还可以使用绑定选项(如值转换器,或者控件上的格式化器)进一步控制从对象属性到显示值的转换。)

1
最初返回NSString并没有起到任何作用,但是在文本字段单元格上启用了“绑定到表格单元格视图”属性后,一切都正常了!由于您的出色解释,我找对了地方。谢谢! - iphone007

-1
如果您想要显示一个字符串,请返回一个NSString*,例如:
- (id)tableView:(NSTableView*)sender objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)rowIndex
{
return [NSString stringWithFormat:@"Row: %d , Col: %@", rowIndex, [tableColumn identifier]];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接