iPhone: Eu estou tentando usar uma instrução if, mas ele não está funcionando para mim
-
12-09-2019 - |
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.
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 ??p>
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
}