Adicionando uma AlertView No viewWillAppear, iPhone
-
22-07-2019 - |
Pergunta
Eu estou tentando mostrar uma visão alerta logo que o aparece vista (sem o uso de um botão). Em viewcontroller.m eu tenho:
- (void) viewWillAppear:(BOOL)animated
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];
[alert show];
[alert release];
}
e em viewcontroller.h eu tenho:
IBOutlet UIView *alert;
Eu não tenho feito nada para o meu arquivo .xib.
Quando executado no simulador recebo a seguinte no console:
2009-11-30 23: 41: 36,079 BatteryApp [867: 20b] *** terminação app devido à exceção não capturada 'NSInternalInconsistencyException', razão: '- [UIViewController _loadViewFromNibNamed: Pacote:] carregado a ponta "BatteryAppViewController", mas a saída de vista não foi definida. '
Todas as ideias onde eu tenho errado for, algo a ver com a minha xib?
Editar // Eu alerta de conexão para uma nova visão na minha xib, ainda não sorte
Solução
O problema é que os dois Core Animation (um para ver o ponto de vista atual, e o outro para mostrar o alerta) se sobrepõem. Você precisa separar estes dois movimentos de animação, seguindo esta solução alternativa:
-
Tenha o código de alerta estar em
viewDidAppear
, ao invés deviewWillAppear
-
[alert performSelector:@selector(show) withObject:nil afterDelay:0.0]
chamada. Isso garante que o alerta ocorre após o término da animação atual.
Você pode precisar de ter cuidado sobre a liberação de alert
bastante ainda. Se eu fosse você, eu teria um método separado (por exemplo showHelloAlert), e, em seguida, chamá-lo de viewDidAppear:
- (void)viewDidAppear: (BOOL)animated {
[self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
[super viewDidAppear:animated];
}
Outras dicas
Tente colocar o alerta na viewDidAppear.
Além disso, qual é a IBOutlet para? Tente tomar a coisa toda para fora.
Abra o arquivo xib no Interface Builder e arraste o controle do dono do arquivo (que deve ser de BatteryAppViewController
classe) para o seu ponto de vista (não o alerta) e selecione vista a partir do menu que aparece. O registro indica que você não fez esta conexão de saída.
Você faz UIAlerts Não conecte-se no Interface Builder. Alertas não têm nibs customizáveis ??assim que você não pode carregá-los no construtor de interface. Você precisa remover o:
IBOutlet UIView *alert;
... completamente.
A mensagem de erro diz que você não tem vista definida para o seu controlador de exibição. Você precisa configurar isso no Interface Builder.