2
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 rButton.action = @selector (refreshAction); cliquer sur le bouton ne fera rien mais il ne plante pas non plus.UIBarButtonItem bloque l'application iPhone lorsque le bouton est cliqué

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

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

J'ai passé probablement 3 heures à essayer de faire fonctionner cela, en vain.

Répondre

1

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 [release tableController] a résolu le problème

0

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

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

Peut-être que la cible ne sont pas sauvés si vous ne spécifiez pas aussi l'action à l'initialiseur.

0

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

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

Il s'avère que la mauvaise gestion de la mémoire a été le coupable, merci pour votre suggestion cependant. –

Questions connexes