我有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
错误在哪里?
答案 0 :(得分:0)
-[NSTableColumn dataCellForRow:]
返回 prototype 单元格,该单元格用于显示该列和行的值。这个原型单元可以重复用于同一列中的多行,因此您不能依赖它具有给定行中显示的特定值。
通常,如果要枚举表视图显示的值,则迭代其数据源 - 符合NSTableViewDataSource
的实例,可以通过-[NSTableView dataSource]
或{如果您使用绑定,则{1}}实例绑定到NSArrayController
。
如果由于某种原因您不能或不想使用数据源,则应使用contents
代替。此方法确保使用给定列和行的数据源/内容值填充单元格。