Objective C: int внезапно изменяется на 1-е условие if при выполнении инструкции If / Then

#objective-c #if-statement #uidatepicker #uiactionsheet

#objective-c #if-statement #uidatepicker #uiactionsheet

Вопрос:

Хорошо, это странная проблема… вместо того, чтобы публиковать много кода, я опубликую несколько фрагментов, которые объяснят:

Это таблица действий, в которую я добавил UIDatePicker

в моем файле .h

 NSInteger tagOfDateToUse;
  

в моем файле .m я удостоверяюсь, что он очищен при viewDidLoad

 tagOfDateToUse = 0;
  

Мне нужна эта переменная, потому что на экране есть несколько текстовых полей, которые могут вызывать этот лист действий. Итак, я установил это значение int так, что если оно равно 100, оно перейдет в одно текстовое поле, если 101, оно перейдет в другое

Я установил tagOfDateToUse в IBAction. Затем в

 (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
  

… Выполните некоторые действия

Оно отлично работает с 1-м (100), но когда я нажимаю свою вторую кнопку, до этого момента оно составляет 101.

Как только оно попадает в if tagOfDateToUse, это __, он думает, что это 100, когда до этого момента это было 101… что в операторе if заставляет его возвращаться к 100… Чего мне здесь не хватает…

 if (tagOfDateToUse = 100) {vacation_starton.text = [[NSString alloc] initWithFormat:@"%@", [formatter stringFromDate:selectedDate]];
    }
    else if  (tagOfDateToUse = 101)
    {
     vacation_endon.text = [[NSString alloc] initWithFormat:@"%@", [formatter stringFromDate:selectedDate]];

    }
  

Спасибо!

Комментарии:

1. дважды проверьте свою инструкцию if… похоже, вы выполняете присваивание вместо ‘==’.

2. @slycrel: Вы должны опубликовать это в качестве ответа, поскольку это почти наверняка проблема.

3. Это должен быть двойной знак равенства….. Спасибо JcPennyPincher!!!

4. вы должны принять один из четырех правильных ответов, приведенных ниже.

Ответ №1:

Вы присваиваете значение 100 тегуofdatetouse, что совершенно законно, а затем значение вычисляется как логическое условие, в котором все, кроме 0, является истинным, и только 0 является ложным.

Попробуйте изменить его на this…

 if (tagOfDateToUse == 100)
  

Комментарии:

1. И я был избит до предела.

Ответ №2:

Возможно, вам не хватает присваивания, которое у вас есть в этом условии. Вы имели в виду написать if (tagOfDateToUse == 100) and else if (tagOfDateToUse == 101) ?

Ответ №3:

Вы присваиваете 100 тегуofdatetouse в инструкции if. Вместо этого вам нужно выполнить сравнение. Это простая опечатка.

 if (tagOfDateToUse = 100)
  

должно быть

 if (tagOfDateToUse == 100)
  

Убедитесь, что у вас включена опция предупреждения «Отсутствуют фигурные скобки». Это действительно помогает отслеживать проблемы такого типа.

Ответ №4:

 if (tagOfDateToUse = 100)
  

Очень распространенная ошибка. Вместо равенства используется присваивание, которое является истинным. Измените его на == . Некоторые люди предпочитают размещать константу слева, чтобы избежать этого.

 if (100 == tagOfDateToUse)
  

Теперь, если вы пропустите одно = , компилятор будет возражать.

Комментарии:

1. Или используйте современный компилятор и не игнорируйте предупреждения.

2. @JeremyP, но вы знаете, гораздо проще игнорировать предупреждение, чем ошибку компиляции. Просто шучу :-). Да, вы правы, никто не должен игнорировать предупреждения. Они могут быть очень опасными, и их трудно вычислить, просто потому, что мы никогда не думали, что можем допускать такого рода ошибки.