UIBarButtonItem bate iphone app quando o botão é clicado
-
21-08-2019 - |
Pergunta
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL];
rButton.action = @selector(refreshAction);
self.navigationItem.rightBarButtonItem = rButton;
[rButton release];
O código acima fino trabalha para criar um botão e adicioná-lo à barra de navegação, mas quando clico no botão que trava o aplicativo com um EXC_BAD_ACCESS. Se eu comentar rButton.action = @selector (refreshAction); clicando no botão não vai fazer nada, mas ele não falhar qualquer um.
- (void)refreshAction {
NSLog(@"refreshAction");
}
Este código é um método viewDidLoad do TableViewController que é empurrado para a pilha navigationController do método NavigationViewController viewDidLoad.
Eu passei provavelmente 3 horas a tentar chegar a este trabalho, sem sucesso.
Solução
Como o gerenciamento de memória usual era o culpado. Carregando o tableViewController do navigationController:
NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease]; self.nearbyTableController = tableController;
[self pushViewController:self.nearbyTableController animated:YES]; [tableController release];
lançando um conjunto de objetos de disparo automático ... deve ser o erro mais comum no gerenciamento de memória. Excluindo essa linha [liberação tableController] resolveu o problema
Outras dicas
Qualquer sorte se você especificar @selector(refreshAction)
quando você cria o botão, ou seja:.
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];
Talvez o destino não são salvas se você não especificar também a ação para o inicializador.
Eu não sou exatamente 100% certo porque seu código não funciona, mas definindo o seletor diretamente no construtor funciona:
UIBarButtonItem *rButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(refreshAction)];