#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, но вы знаете, гораздо проще игнорировать предупреждение, чем ошибку компиляции. Просто шучу :-). Да, вы правы, никто не должен игнорировать предупреждения. Они могут быть очень опасными, и их трудно вычислить, просто потому, что мы никогда не думали, что можем допускать такого рода ошибки.