从tableView返回什么:objectValueForTableColumn:row:?

iph*_*007 2 macos cocoa objective-c nstableview

OSX上的Cocoa编程新手.来自iOS编程.看起来NSTableView编程类似于UITableView编程.所以我试图实现NSTableViewDataSource协议的一部分,但我不知道从tableView:objectValueForTableColumn:row:方法返回什么,以便获得一个简单的字符串显示在行和列上.我用谷歌搜索,浏览Apple文档,找不到任何东西.该方法返回类型"id",因此没有帮助.谢谢.

Ken*_*ses 6

返回的对象值取决于a)对模型有意义的内容,以及b)如何设置表视图的单元视图.

我假设您正在使用基于视图的表视图,因为您是新的,这是现代方式.因此,表视图获取返回的对象值,-tableView:objectValueForTableColumn:row:并尝试在单元视图上设置它.它检查单元视图是否实现-setObjectValue:,如果是,则调用它并传递从数据源返回的对象值.

那么,什么样的观点支持-setObjectValue:以及它们在设置时如何处理呢?好吧,任何继承的视图NSControl都有这样的方法和显示,并且可能让用户编辑该值.这种控制的一个常见例子是NSTextField.因此,如果您的单元格视图是一个NSTextField控件或其他控件,那么您的数据源可能会返回一个NSString,这就足够了.

如果控件具有格式化程序对象(子类的实例NSFormatter),则您的数据源可能会返回其他类型的对象,例如NSNumberNSDate,并且格式化程序会将其转换为文本或从文本转换.

如果您的单元格视图是NSTableCellView,则该类也会响应-setObjectValue:.因此,表视图将使用从数据源返回的对象值来调用它.但是,对于对象值,NSTableCellView本身并不任何事情.它只是持有它.然后你可以做的是让子视图通过objectValue属性绑定到它.他们将通过绑定获得他们的价值观.在这种情况下,数据源可以返回任意对象.子视图将通过为绑定选择适当的键路径来选择要显示和编辑的对象的特定属性.例如,如果您的应用程序操纵Employee对象,您的数据源可以返回该Employee行,NSTableCellView它将保留对它的引用,并且单元格视图中的文本字段可以绑定到NSTableCellView具有objectValue.name显示员工姓名的关键路径.(您可以使用绑定选项进一步控制从对象属性到显示值的转换,例如值转换器或控件上的格式化程序.)