ABPeoplePickerView, un bug dans l'API ??

Nebuchad34Nebuchad34 Membre
décembre 2009 modifié dans API AppKit #1
Bonjour,

Je galère avec un bug de ABPeoplePickerView depuis un bon moment. J'avais une exception à  priori aléatoire en double cliquant sur une row.

En fait, l'exception est levé quand on fait un clic gauche un peu trop long sur une ligne dans la TableView de gauche qui liste les groupes. En clair, si on essaye de l'éditer : KaBOOM !

Rien dans la documentation de ABPeoplePickerView ne fait référence à  l'édition directe des tablesViews, donc je penche pour un bug de l'API !

Comment je fais ??

Réponses

  • Nebuchad34Nebuchad34 Membre
    19:39 modifié #2
    Bon c'est bien un bug de l'API.

    Ils n'ont tout simplement pas pensé à  faire un [tableColumn setEditable:NO] sur les tableColumns de leurs tableViews.

    J'ai résolu le problème en rajoutant le code suivant dans mon awakeFromNib :

    for (NSTableView *tv in [peoplePickerView subviewsWithClass:[NSTableView class]])<br />		for (NSTableColumn *tc in [tv tableColumns])<br />			[tc setEditable:NO];
    


    J'ai envoyé un rapport de bug à  Apple sur bugreport.apple.com
    <br />The ABPeoplePickerView implements doubleActions on Groups and Records but does not handle any editing. That&quot;s expected. The app crashing when trying to edit a row by long double clicking is not.<br /> <br />If you add an ABPeoplePickerView instance, set target and doubleActions on groups and records, the tableViews within the ABPeoplePickerView will raise an exception if your double click on a row is a &quot;long double click&quot; : before the doubleAction is sent, the tableView tries to edit the row and crashes.<br />By going through all of the subviews in ABPeoplePickerView, filtering the TableViews by class, I managed to sent this method to all the tableColumns I could find :<br />[tableColumn setEditable:NO];<br />If I do this in my awakeFromNib, the crash never occurs because the tableView does not try to edit on double click, it juste sends the double action as expected.<br /> <br />Steps to reproduce :<br />add a ABPeoplePickerView in an NSWindow.<br />In the awakeFromNib of its NSWindowController, add the following calls:<br /><br />- (void)awakeFromNib<br />{<br />	[peoplePickerView setAllowsMultipleSelection:YES];<br />	[peoplePickerView setAllowsGroupSelection:YES];<br />	[peoplePickerView setTarget:self];<br />	[peoplePickerView setNameDoubleAction:@selector(someMethodToHandleDoubleClickOnNames)];<br />	[peoplePickerView setGroupDoubleAction:@selector(someMethodToHandleDoubleClickOnGroups)];<br />}<br />compile and run. Select a group in the tableView on the left.<br />Clic the row again like if you wanted to edit it<br /><br />Expected behavior :<br />The ABPeoplePickeView calls the &quot;someMethodToHandleDoubleClickOnGroups&quot; method.<br /><br />Actual behavior :<br />The ABPeoplePickerView tries to edit the row and crashes<br /> <br />Fix that I came up with :<br />Adding the following code in the awakeFromNib fixes the problem :<br />for (NSTableView *tv in [peoplePickerView subviewsWithClass:[NSTableView class]])<br />		for (NSTableColumn *tc in [tv tableColumns])<br />			[tc setEditable:NO];<br />
    

Connectez-vous ou Inscrivez-vous pour répondre.