NSTableCellView ne conserve pas la valeur de son NSTextField
-
21-12-2019 - |
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.
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
.