0

我有 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

错误在哪里?

4

1 回答 1

0

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

一般来说,如果你想枚举一个表视图显示的值,你可以遍历它的数据源——一个NSTableViewDataSource符合条件的实例,可以通过 获得-[NSTableView dataSource],或者如果你使用绑定,则为绑定的NSArrayController实例。contents

如果由于某种原因您不能或不想使用数据源,则应-[NSTableView preparedCellAtColumn:row:]改为使用。此方法确保使用给定列和行的数据源/内容值填充单元格。

于 2013-10-09T01:59:14.113 回答