iPhone: я пытаюсь использовать оператор if, но он не работает для меня - PullRequest
1 голос
/ 12 июля 2009

(Почти решено, но не совсем) (Мое временное решение состоит в том, чтобы использовать метод void и вызывать его в каждой кнопке, и таким образом я могу редактировать код, используемый несколькими кнопками, а не при улучшении необходимости редактировать каждую отдельную кнопку в операторе if)

Могу поспорить, что это действительно простая ошибка, которую я сделал, но я не могу ее найти.

Я пытаюсь показать ранее определенное предупреждение, когда целое число достигает 50; это оператор if, который я использую в методе viewDidLoad:

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

Когда целое число достигает 50, ничего не происходит. Где я ошибся?

Целое число изменяется следующим образом в IBAction:

 count+=10;

Если я удаляю оператор if и просто оставляю предупреждение для показа, оно отображается при загрузке представления. Таким образом, предупреждение не проблема.

Кто-то указал, что если этот код запускается только один раз в методе viewDidLoad и целое число изменяется на 50, то на более позднем этапе не будет ждать, пока целое число будет 50, вместо этого будет видно, что значение не равно 50, и не выполнять оповещение никогда.

Итак, как бы я посмотрел целое число с кодом и выполнил предупреждение , когда целое число равно 50, Но не вызывать ли оповещение в действии, которое увеличивает целое число?

Да, и, кстати, я попытался вызвать оператор if в действии, которое увеличивает целое число, и это работает, но у меня есть около 100 кнопок, которые увеличивают число целых чисел, и проверяет, не кажется ли значение 50 в каждой отдельной кнопке. немного места и времени на копирование и вставку. Также я планирую сделать больше, чем просто предупреждение, когда целое число достигает 50. Я уверен, что есть более эффективный способ просто проверить, равно ли значение целого числа 50.

Ответы [ 9 ]

4 голосов
/ 12 июля 2009

Когда вы говорите

Но когда целое число достигает 50, ничего не происходит

Это наводит меня на мысль, что вы меняете целочисленное значение после запуска метода -viewDidLoad. Ваш оператор if оценивается только один раз, когда загружается представление, поэтому, если вы изменяете значение целого числа после этой точки, вам нужно добавить представление оповещения ко всему, что изменяет целое число.

1 голос
/ 14 июля 2009

Проверка наблюдения значения ключа

Если вы сделаете счетчик свойством, вы сможете настроить наблюдателя, который будет срабатывать при каждом изменении значения. В этом наблюдателе вы можете выполнить проверку, чтобы активировать оповещение.

1 голос
/ 12 июля 2009

Попробуйте добавить

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

В том же IBAction сразу после того, как вы добавили к счету 10.

1 голос
/ 12 июля 2009

Это должно быть хорошо - Objective-C - это тонкий слой поверх C, поэтому должен работать правильный синтаксис C. Какая переменная считается? Вы хотите определить его как int, а не как NSNumber. NSNumber - это класс, который оборачивает число, чтобы его можно было использовать как объект Objective-C, но вы не можете сравнить их, используя синтаксис ==.

Надеюсь, это поможет!

0 голосов
/ 05 февраля 2011

ViewDidLoad запускается только при загрузке вашего представления, то есть при его создании. После этого он не запустится снова, за исключением особых обстоятельств.

Если вы хотите, чтобы он проверял счет каждый раз, когда вы нажимаете кнопку, и увеличивал счет, то сделайте это в IBAction.

Вы могли бы создать метод, который проверяет счетчик, например, так:

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

И назовите его в своих кнопках примерно так, как только вы увеличите его:

if ([self checkCounter])
{
//do stuff when it's 50
}
0 голосов
/ 12 июля 2009

Я не понимаю, почему вы не можете показать предупреждение в коде, который увеличивает счетчик? Для этого требуется ссылка на UIAlertView ... Или опубликовать уведомление, которое прослушивает код удержания предупреждения.

0 голосов
/ 12 июля 2009

Самый простой ответ: пусть все вещи, которые увеличивают count, проходят через один метод в вашем контроллере, и этот метод проверяет, пора ли показывать предупреждение.

Более сложный ответ, который включает просмотр значения: Наблюдение значения ключа . Вы можете настроить наблюдателя, чтобы он наблюдал за значением и отвечал предупреждением, когда оно достигает 50. Но это займет больше кода и будет более сложным и подверженным ошибкам, чем просто введение центрального метода для обработки поведения.

0 голосов
/ 12 июля 2009

пару вещей, чтобы попробовать,

  • установить точку останова в операторе if
  • изменить оператор if на count >= 50
  • действительно ли считать число int или это число с плавающей точкой?
0 голосов
/ 12 июля 2009

Попробуйте

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

и посмотри, есть ли проблема. Трудно сказать, ошибся ли счет или оповещен, но проблема не в самом вашем операторе if.

...