Вот фрагмент кода, который я использую для заполнения NSTableView на основе представления данными:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
MyCustomCellView *view = (MyCustomCellView *)[tableView makeViewWithIdentifier:@"MyCustomCellView" owner:self];
if (!view) {
NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"MyCustomCellView" bundle:[NSBundle mainBundle]];
NSArray *array = nil;
if ([cellNib instantiateNibWithOwner:self topLevelObjects:&array]) {
DLog(@"%@", array);
view = [array objectAtIndex:0];
[view setIdentifier:@"MyCustomCellView"];
}
[cellNib release];
}
MyObject *object = [_objects objectAtIndex:row];
[[view titleTextField] setStringValue:object.title];
return view;
}
Оператор DLog
печатает массивы следующим образом для двух последовательных вызовов делегата:
(
"<MyCustomCellView: 0x7fb2abe81f70>",
"<NSApplication: 0x7fb2ab80cbf0>"
)
(
"<NSApplication: 0x7fb2ab80cbf0>",
"<MyCustomCellView: 0x7fb2abb2c760>"
)
Это выводится только для двух строк из нескольких сотен, поэтому я случайно либо правильно отображаю свое представление, либо получаю ошибку unrecognized selector
при вызове setIdentifier:
для view
объекта, когда view
равен objectAtIndex:0
на самом деле это экземпляр NSApplication
объекта верхнего уровня из загруженного пера.
Это ошибка в механизме загрузки пера или я что-то не так делаю с этим кодом?