Вот пример использования нескольких табличных представлений с методами источника данных и приложения на основе документов:
#pragma mark - Data Source Methods
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tv
{
if (tv == racerTableView)
return [racerList count];
else if (tv == vehicleTableView)
return [vehicleList count];
else
return 0; // something wrong here...
}
- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)col
row:(NSInteger)rowi
{
NSString *colid = [col identifier];
if (tv == racerTableView){
NHRacers *racer = [racerList objectAtIndex:rowi];
return [racer valueForKey:colid];
}
else if (tv == vehicleTableView){
NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
return [vehicle valueForKey:colid];
}
else
return 0; // something wrong here...
}
- (void)tableView:(NSTableView *)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)rowi
{
NSString *colid = [col identifier];
if (tv == racerTableView) {
NHRacers *racer = [racerList objectAtIndex:rowi];
[racer setValue:obj forKey:colid];
}
else if (tv == vehicleTableView){
NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
[vehicle setValue:obj forKey:colid];
}
else
nil; // something wrong here...
[self updateChangeCount:NSChangeDone];
}
Выходы источника данных tableview устанавливаются как Владелец файла, а Владелец файла установил vehicleTableView и racerTableView для их соответствующего «Табличного представления» в IB. Ключ colid проверяет идентификатор (устанавливается в IB путем выбора столбца табличного представления в раскрывающемся списке «Идентичность», в то время как отображается «Инспектор идентификации»). Эти значения были выбраны в качестве свойств KVC (совместимых с кодировкой клавиш) классов, отображаемых в табличных представлениях: используйте первую букву в нижнем регистре (см. Документацию Apple для отдыха).
Например:
(в NHVehicles.h)
@interface NHVehicles : NSObject
{
NSUInteger entry;
NSString *name;
NSString *vehicleClass;
}
@property NSUInteger entry;
@property NSString *name, *vehicleClass;
@end
(в NHVehicles.m)
@implementation NHVehicles
@synthesize entry, name, vehicleClass;
@end
для этого tableView "entry", "name" и "vehicleClass" будут вводиться (без) в поля идентификаторов для соответствующих столбцов.
Если вы не хотите показывать некоторые данные в классе, просто не вводите ключ для идентификатора столбца. Предупреждение: я использую Xcode 4.5.1, и я заметил, что, как только я ввел несколько ключей для идентификаторов определенного столбца, а затем передумал и попытался очистить текст, он пожаловался, когда я удалил текст из поле идентификатора (я больше не мог оставлять поле пустым для отредактированных столбцов). Обойти это было несложно, но это стало неожиданностью.