2017-01-14 1 views
0

Lorsque j'essaie de construire une vue par ligne pour ma vue NSTableView basée sur la vue, la méthode makeViewWithIdentifier:owner: renvoie toujours zéro. La table est construite en IB et tout semble être lié correctement, les méthodes de délégué sont appelées comme je m'y attendais. Lorsque vous parcourez la documentation Apple à propos de la méthode makeViewWithIdentifier, je ne trouve pas de raison pour laquelle la méthode retournera zéro. Un extrait du code:MakeViewWithIdentifier: owner: renvoie 0il

- (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; 
} 

Pourquoi pourrait view nul?

+0

je soupçonne @ "id" ne correspond pas à l'ID de vues. – shallowThought

+0

Quelle est la raison pour ne pas utiliser le même identifiant que l'identifiant de la colonne? – vadian

+0

@vadian Vous venez de me sauver, mais je ne comprends vraiment pas pourquoi. La modification de l'identificateur d'affichage arg à la même chose que la colonne l'a corrigé. Je pensais que l'identifiant de vue était seulement utilisé pour chercher une certaine vue ou quelque chose. Eh bien, appris quelque chose de nouveau au moins! –

Répondre

0

Vous devez utiliser le même identifiant et le code dans 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