Pregunta

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

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

El código anterior funciona bien para crear un botón y añadirlo a la barra de navegación, pero cuando hago clic en el botón que se bloquea la aplicación con un EXC_BAD_ACCESS. Si comento hacia fuera rButton.action = @selector (refreshAction); clic en el botón no hacer nada, pero no chocar tampoco.

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

Este es el código de un método viewDidLoad de TableViewController que se inserta en la pila navigationController del método NavigationViewController viewDidLoad.

He pasado probablemente 3 horas tratando de conseguir que esto funcione, sin ningún resultado.

¿Fue útil?

Solución

A medida que la gestión de memoria habitual era el culpable. Carga del tableViewController del navigationController:

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

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

<=>

liberar un objeto establecido en AutoRelease ... debe ser el error más común en la gestión de memoria. Eliminación de esa línea [liberación tableController] resuelto el problema

Otros consejos

Ha habido suerte si especifica @selector(refreshAction) al crear el botón, es decir:.

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

Tal vez el objetivo no se guardan en si no también especificar la acción que el inicializador.

No estoy exactamente seguro al 100% por las que su código no funciona, pero colocando el selector directamente en el constructor hace el trabajo:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh   
                         target:self 
                         action:@selector(refreshAction)];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top