Question

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL];

rButton.action = @selector(refreshAction);
self.navigationItem.rightBarButtonItem = rButton;
[rButton release];

Le code ci-dessus fonctionne très bien pour créer un bouton et l'ajouter à la barre de navigation, mais quand je clique sur le bouton, il bloque l'application avec un EXC_BAD_ACCESS. Si je commente sur rButton.action = @selector (refreshAction); cliquant sur le bouton ne fera rien, mais ça ne plante pas non plus.

- (void)refreshAction {
    NSLog(@"refreshAction");
}

Ce code est dans un procédé de viewDidLoad TableViewController qui est poussé sur la pile NavigationController de la méthode NavigationViewController viewDidLoad.

J'ai passé probablement 3 heures à essayer d'obtenir que cela fonctionne, mais en vain.

Était-ce utile?

La solution

La gestion de la mémoire habituelle était le coupable. Chargement du tableViewController du NavigationController:

NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease];
self.nearbyTableController = tableController;   

[self pushViewController:self.nearbyTableController animated:YES];
[tableController release];

<=>

libérer un objet mis à l'AutoRelease ... doit être l'erreur la plus commune dans la gestion de la mémoire. La suppression de cette ligne [libération tableController] a résolu le problème

Autres conseils

Un peu de chance si vous spécifiez lorsque vous créez @selector(refreshAction) le bouton, i.e.:.

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];

Peut-être que la cible ne soit pas enregistrée si vous ne spécifiez pas aussi l'action à l'initialiseur.

Je ne suis pas 100% sûr pourquoi votre code ne fonctionne pas, mais plaçant le sélecteur directement dans le constructeur FONCTIONNE:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh   
                         target:self 
                         action:@selector(refreshAction)];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top