#cocoa #object #nsmutablearray #nstableview
#cocoa #объект #nsmutablearray #nstableview
Вопрос:
У меня возникли трудности с заполнением двух tableViews данными из двух разных изменяемых массивов в одном классе. Я анализирую документ *.xml и хочу поместить данные в разные табличные представления. В главе «Использование табличного источника данных» руководства по программированию табличного представления говорится: «Объект источника данных, который управляет несколькими наборами данных, может выбрать соответствующий набор, на основе которого объект NSTableView отправил сообщение». Я понимаю, это означает, что я могу заполнить два разных tableviews из двух разных изменяемых массивов в одном классе. Кажется, я не могу понять, как это сделать, поскольку я не могу найти никакой дополнительной информации, кроме той, что была указана выше.
Мой код заполнения tableview:
- (int)numberOfRowsInTableView:aTableView {
return [arrayPowerData count];
}
- (id)tableView:aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)row {
PowerData* dataPower = [arrayPowerData objectAtIndex:row];
return [dataPower valueForKey:[aTableColumn identifier]];
}
Я знаю, что в обоих массивах есть данные, потому что я могу переключить переменную массива в приведенном выше коде, и она заполняет соответствующий tableview.
[blockTableView reloadData];
[dataTableView reloadData];
Я попробовал маршрут Array Controller / Bindings, но tableViews не заполняются, хотя я не получаю никаких сообщений об ошибках или предупреждений.
Я новичок в программировании на Cocoa / Objective-c и вообще не программист, поэтому буду признателен за любую помощь и / или направление.
Ответ №1:
По сути, здесь происходит то, что обе таблицы вызывают эти функции при их заполнении. Когда это происходит, они передают себя в качестве параметра табличного представления aTableView
. Итак, чтобы заполнить оба, используя одни и те же методы, вам нужно отфильтровать, какое табличное представление в данный момент вызывает метод. Вот основная идея:
- (int)numberOfRowsInTableView:aTableView {
if (aTableView == tableview1) {
return [array1 count];
}
else if (aTableView == tableview2) {
return [array2 count];
}
}
-(id)tableView:aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)row {
if (aTableView == tableview1) {
//populate tableview1 with the corresponding array
}
else if (aTableView == tableview2) {
//populate tableview2 with the other array
}
}