在NSTableView行上循环

时间:2013-10-08 19:51:24

标签: cocoa nstableview

我有N行和两列(column_A和column_B)的NSTableview。 我想在行上骑自行车,我试试这样:

IBOutlet id myTableView;

NSTableColumn *column_A = [myTableView tableColumnWithIdentifier:@"A"];
NSTableColumn *column_B = [myTableView tableColumnWithIdentifier:@"B"];
int nr = [myTableView numberOfRows];
for (int i = 0; i<nr; i++) {
    NSString *a = [[column_A dataCellForRow:i] stringValue];
    NSString *b = [[column_B dataCellForRow:i] stringValue];
    ... (other code)
    a = nil;
    b = nil;
}

但我得到相同的价值,

对于i = 0我得到a = test1和b = test2

对于i = 1我得到a = test1和b = test2

...

对于i = nr -1我得到a = test1和b = test2

错误在哪里?

1 个答案:

答案 0 :(得分:0)

-[NSTableColumn dataCellForRow:]返回 prototype 单元格,该单元格用于显示该列和行的值。这个原型单元可以重复用于同一列中的多行,因此您不能依赖它具有给定行中显示的特定值。

通常,如果要枚举表视图显示的值,则迭代其数据源 - 符合NSTableViewDataSource的实例,可以通过-[NSTableView dataSource]或{如果您使用绑定,则{1}}实例绑定到NSArrayController

如果由于某种原因您不能或不想使用数据源,则应使用contents代替。此方法确保使用给定列和行的数据源/内容值填充单元格。