2013-10-08 3 views
0

У меня есть NSTableview с N строками и двумя столбцами (column_A и column_B). Я хочу велосипед по рядам, я стараюсь так:Cycling on NSTableView rows

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; 
} 

Но я получаю то же значение,

для я = 0 я получаю = test1 и б = test2

для г = 1, I получить = test1 и test2 Ь =

...

для я = NR -1 я получаю = test1 и test2 Ь =

Где ошибка?

ответ

0

-[NSTableColumn dataCellForRow:] возвращает прототип ячейки, который используется для отображения значения в этом столбце и строке. Эта ячейка прототипа может быть повторно использована для нескольких строк в одном столбце, поэтому вы не можете полагаться на нее, имея определенное значение, показанное в данной строке.

В общем, если вы хотите перечислить значения, показанные в виде таблицы, вы перебирать ее источник-ан данных NSTableViewDataSource -conforming экземпляра, который может быть получен с помощью -[NSTableView dataSource], или NSArrayController экземпляр обязан contents если вы используя привязки.

Если по какой-либо причине вы не можете или не хотите использовать источник данных, вместо этого вы должны использовать -[NSTableView preparedCellAtColumn:row:]. Этот метод гарантирует, что ячейка заполнена значением источника данных/содержимого для заданного столбца и строки.

+0

Большое спасибо за ваше предложение. Сегодня я попробую метод prepareCellAtColumn, и тогда я скажу вам. – user2724095

+0

@ user2724095 Почему вы не можете использовать источник данных? –

+0

Все хорошо, большое спасибо. С методом prepareCellAtColumn в порядке. Затем я также пытаюсь использовать dataSource. большое спасибо – user2724095