Pergunta

(Quase resolvido, mas não completamente) (Minha solução temporária é usar um método vazio e chamá-lo em cada botão, e dessa forma eu posso editar o código usado por vários botões em vez de ao fazer melhorias ter que editar cada botões individuais instrução IF)

Aposto que é um erro muito simples eu fiz, mas eu não posso encontrá-lo.

Eu estou tentando mostrar um alerta previamente definido quando um inteiro chega a 50; este é o se o uso declaração I no método viewDidLoad:

if(count == 50){
    [alert show];
}

Quando o inteiro chega a 50, nada acontece. Onde eu errado se foi?

O inteiro é alterado como esta em um IBAction:

 count+=10;

Se eu remover a declaração se e apenas deixar o alerta para show, ele exibe quando carrega vista. Assim, o alerta não é o problema.

Alguém salientou que, se este código é executado apenas uma vez no método viewDidLoad eo inteiro é alterado para 50, numa fase posterior não irá aguardar o inteiro para ser 50, em vez verá o valor não ser 50 e não executar o alerta sempre.

Então, como eu ia assistir o inteiro com código, e executar um alerta quando o inteiro é de 50, Mas não chamar o alerta na ação que está aumentando o número inteiro?

Oh e pela maneira que eu tentei chamar a instrução if na ação que aumenta o número inteiro e que as obras, mas eu tenho cerca de 100 botões que aumentam a contagem inteiro e verificar se o valor é de 50 em cada único botão parece um espaço pouco demorado e demorado para tudo o que copiar e colar. Também estou pensando em ter mais do que apenas um alerta acontecer quando o inteiro atinge 50. Im certeza de que há uma maneira mais eficiente de apenas verificar se o valor da contagem inteiro é de 50.

Foi útil?

Solução

Tente adicionar

if(count == 50){
    [alert show];}

No mesmo IBAction direita depois de adicionar 10 para contar.

Outras dicas

Quando você diz

Mas quando o inteiro atinge 50 nada acontece

Isso leva-me a acreditar que você está mudando o valor inteiro após o método -viewDidLoad corridas. Sua instrução if é avaliada somente uma vez, quando as cargas de vista, por isso, se você está mudando o valor do inteiro depois desse ponto você vai precisar adicionar a exibição de alerta para o que é mudar o número inteiro.

Isso deve ficar bem - Objective-C é uma camada fina no topo de C, de modo sintaxe C válida deve funcionar. Que tipo de variável é contagem? Você deseja defini-lo como um int, não um NSNumber. NSNumber é uma classe que envolve um número para que ele possa ser usado como um objeto Objective-C -. Mas você não pode compará-los usando o == sintaxe

Espero que ajude!

Verifique a Key-Value observação

Se você fizer o contador de uma propriedade, você deve ser capaz de configurar um observador que é acionado sempre o valor é alterado. Nesse observador, você pode fazer o seu check para disparar o alerta.

Tente

NSLog(@"count is %d",count); 

e ver se o problema está lá. É difícil dizer se a contagem é confuso ou alerta, mas o problema não é com o seu se a própria declaração.

um par de coisas para tentar,

  • definir um ponto de interrupção na instrução if
  • mudar o comando if para count >= 50
  • é contar realmente um int ou é um float?

A resposta mais simples:. Ter todas as coisas que incremento count ir através de um método em seu controlador para fazê-lo e ter essa verificação método se é hora de mostrar o alerta

A resposta mais complicada que envolve assistindo o valor: Key-Value Observing . Você pode configurar um observador para assistir ao valor e responder com o alerta quando ela atinge 50. Mas isso vai levar mais de código e ser mais complicado e bug-propensa do que apenas a introdução de um método central para lidar com o comportamento.

Eu não obtê-lo, porque você não pode mostrar o alerta no código que aumenta o contador? É jut precisa de uma referência para o UIAlertView ... Ou publicar uma notificação o código de retenção de alerta está ouvindo.

ViewDidLoad só é executado quando sua visão é carregado - que é quando ele é criado. Depois disso ele não vai ficar correr novamente, exceto em circunstâncias especiais.

Se você quer que ele verifique a contar cada vez que você apertar um botão e aumentar a contagem, em seguida, fazê-lo no IBAction.

Você poderia fazer um método que verifica o contador como assim

-(BOOL) checkCounter
{
  return count == 50;
}

E chamá-lo em seus botões como assim depois de ter incrementado-lo:

if ([self checkCounter])
{
//do stuff when it's 50
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top