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

Foi útil?

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:

  1. Tenha o código de alerta estar em viewDidAppear, ao invés de viewWillAppear

  2. [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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top