2017-01-14 3 views
0

Когда я пытаюсь построить представление для каждой строки для моего основанного на просмотре NSTableView, метод makeViewWithIdentifier:owner: всегда возвращает nil. Таблица построена в IB, и все, кажется, связаны правильно, все методы делегатов называются так, как я ожидал. При просмотре документации Apple о методе makeViewWithIdentifier я не могу найти причину, по которой метод вернет нуль. Отрывок из кода:MakeViewWithIdentifier: owner: возвращает nil

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    if ([tableColumn.identifier isEqualToString:@"foo"]) { 
     NSTableCellView *view = [tableView makeViewWithIdentifier:@"id" owner:self]; // Is always nil.. 
     view.textField.stringValue = [myArray objectAtIndex: row]; 

     return view; 
    } 
    return nil; 
} 

Почему бы view быть нулевым?

+0

Я подозреваю @ "идентификатор" не соответствует взгляды ID. – shallowThought

+0

В чем причина не использовать тот же идентификатор, что и идентификатор столбца? – vadian

+0

@vadian Вы только что спасли меня, но я действительно не понимаю, почему. Изменение идентификатора вида arg соответствует тому, что исправлен столбец. Я думал, что идентификатор вида использовался только для просмотра определенного вида или чего-то еще. Ну, по крайней мере, узнал что-то новое! –

ответ

0

Вы должны использовать один и тот же идентификатор в XIb и код:

static NSString * const ItemMainTableCellViewIdentifier = @"ItemMainTableCellViewIdentifier"; 

nib = [[NSNib alloc] initWithNibNamed:@"ItemMainTableCellView" bundle:nil]; 
[self.table registerNib:nib forIdentifier:ItemMainTableCellViewIdentifier]; 

ItemMainTableCellView *cellView = [tableView makeViewWithIdentifier:ItemMainTableCellViewIdentifier owner:self]; 

enter image description here

Смежные вопросы