Domanda

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

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

Il codice sopra funziona bene per creare un pulsante e aggiungerlo alla barra di navigazione, ma quando clicco sul pulsante si blocca l'applicazione con un EXC_BAD_ACCESS. Se io commento rButton.action = @selector (refreshAction); Cliccando il pulsante non farà nulla, ma non va in crash neanche.

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

Questo codice è in un metodo di TableViewController viewDidLoad che viene inserito nello stack navigationController dal metodo NavigationViewController viewDidLoad.

Ho passato probabilmente 3 ore a cercare di ottenere questo al lavoro, senza alcun risultato.

È stato utile?

Soluzione

Come al solito la gestione della memoria era il colpevole. Caricamento del tableViewController dal navigationController:

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

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

<=>

rilasciando un oggetto impostato autorelease ... deve essere l'errore più comune nella gestione della memoria. Cancellando quella linea [rilascio tableController] risolto il problema

Altri suggerimenti

Hai avuto fortuna se si specifica @selector(refreshAction) quando si crea il pulsante, cioè:.

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

Forse il bersaglio non viene salvato se non si specifica anche l'azione al di inizializzazione.

Non sono esattamente sicuro al 100% perché il codice non funziona, ma impostando il selettore direttamente nel costruttore funziona:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh   
                         target:self 
                         action:@selector(refreshAction)];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top