Question

Ce qui suit se trouve dans la méthode viewForTableColumn du délégué.Je crée dynamiquement des colonnes de tableau dans la source de données en fonction d'une sélection dans une vue de liste.

    NSDictionary* rowData = [[self tableData] objectAtIndex:row];
    NSString* identifier = [tableColumn identifier];

    NSTableCellView* result = [tableView makeViewWithIdentifier:@"myCellView" owner:self];
    if (result == nil) {
        result = [[NSTableCellView alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];
        _textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];
        [result setTextField:_textField];
        [[result textField] setStringValue:[rowData objectForKey:identifier]];
    }
    else {
        [[result textField] setStringValue:[rowData objectForKey:identifier]];
    }
    NSLog(@"result text field: %@", [[result textField] stringValue]);

    return result;

Maintenant en

-(void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView             forRow:(NSInteger)row {
NSLog(@"did add: %ld", row);
NSTableCellView* aView = [rowView viewAtColumn:0];
NSLog(@"%@", [[aView textField]stringValue]);
NSLog(@"%@",[[[rowView viewAtColumn:0 ] textField] stringValue]);
}

le champ de texte est un zombie.Ce qui donne?Merci pour votre aide.

Était-ce utile?

La solution

a dû obtenir une référence (iboutlet) pour NSTABLECELLView dans le contrôleur de la fenêtre.C'est à ce sujet, rien d'autre.Maintenant, je peux accéder à cela via son identifiant dans le délégué NSTableView;La référence est conservée même après avoir supprimé toutes les colonnes et ajouter de nouvelles colonnes à la tableView.

S'agissant maintenant de la performance de TableView très abyssale sur une tablette allant de 300 à 3000 lignes!C'est pour un autre jour.

Autres conseils

La seule chose à laquelle je peux penser, c'est que lorsque vous faites :

_textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];

vous provoquez une libération de ce qui était auparavant _textField.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top