UIBarButtonItem aplicación se bloquea iPhone cuando se hace clic en el botón
-
21-08-2019 - |
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.
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)];