Je construis une application Mac basée sur un document. J'ai deux classes myDocument et Person. La difficulté que j'ai est quand je pousse le bouton pour ajouter une nouvelle personne dans la vue de tableau et l'affiche n'apparaît pas dans la vue de tableau. J'ai placé des instructions de journal dans les méthodes de délégué. Comme mes instructions de log ne sont pas affichées dans la console, je sais qu'elles ne sont pas appelées. Voici les mises en œuvre des méthodes de déléguéPourquoi les méthodes déléguées de ma vue table ne sont-elles pas appelées?
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [employees count];
}
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
{
// What is the identifier for the column?
NSString *identifier = [aTableColumn identifier];
NSLog(@"the identifier's name is : %s",identifier);
// What person?
Person *person = [employees objectAtIndex:rowIndex];
// What is the value of the attribute named identifier?
return [person valueForKey:identifier];
}
- (void)tableView:(NSTableView *)aTableView
setObjectValue:(id)anObject
forTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
{
NSString *identifier = [aTableColumn identifier];
Person *person = [employees objectAtIndex:rowIndex];
NSLog(@"inside the setObjectMethod: %@",person);
// Set the value for the attribute named identifier
[person setValue:anObject forKey:identifier];
[tableView reloadData];
}
Voici une photo de mon .xib
Voici mes méthodes d'action
#pragma mark Action Methods
-(IBAction)createEmployee:(id)sender
{
Person *newEmployee = [[Person alloc] init];
[employees addObject:newEmployee];
[newEmployee release];
[tableView reloadData];
NSLog(@"the new employees name is : %@",[newEmployee personName]);
}
-(IBAction)deleteSelectedEmployees:(id)sender
{
NSIndexSet *rows = [tableView selectedRowIndexes];
if([rows count] == 0){
NSBeep();
return;
}
[employees removeObjectAtIndexs:rows];
[tableView reloadData];
}
Vous n'avez pas besoin d'envoyer 'reloadData' à la vue table dans' tableView: setObjectValue: forTableColumn: row: ', car c'est la vue de table qui a envoyé ce message - elle connaît déjà la valeur modifiée. Il sera re-interroger à nouveau après juste au cas où vous substitué quelque chose d'autre. –
Veuillez modifier votre question pour inclure l'implémentation de 'createEmployee:'. –
J'ai ajouté l'implémentation de createEmployee – lampShade