Заполнение двух NSTableViews из двух разных NSMutableArrays в одном классе

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