Как я написал в своем комментарии, причина такого поведения - порядок, в котором вызываются методы.Позвольте мне объяснить подробно:
Экран запуска начального экрана имеет обычные методы viewWillAppear и viewDidAppear.В этих сообщениях средство выбора создается (или любой другой элемент) и ему присваивается значение, которое предоставляется базовыми структурами данных.Итак, скажем, сборщик получает 10.
Теперь при выборе другого значения 20, которое помещается в переменную, и я подумал, что это будет СОХРАНИТЬ.
Теперь открывается диалоговое окно SMS и отправляется смс.
Но то, что происходит сейчас, является причиной этой странной проблемы.Когда диалоговое окно SMS исчезает, screenVC запускает viewWillAppear, это устанавливает для переменной BACK значение 10 (поскольку структуры данных еще не были обновлены)
Теперь смс возвращается в didFinishWithResult, и лежащие в основе 20 теряются.
Итак, все, что вам нужно сделать, - это убедиться, что переменная, используемая для обновления вашей структуры данных из sms didFinishWithResult, передается в качестве параметра при вызове dismiss на экране.
Просто дополнительная проблема.Еще более удивительно, если screenVC открывает другой screen2VC, который имеет только средство выбора (и устанавливает значение 10), а этот затем открывает диалоговое окно смс.Когда диалог sms возвращается, он заставляет screen2VC вызывать viewWillAppear и viewDidAppear, даже если они были отклонены.
Полагаю, это происходит потому, что экран запуска диалогового окна смс должен быть там, когда закрывается диалоговое окно смс.
Надеюсь, я мог бы объяснить достаточно хорошо, чтобы понять - просто спросите, не ясно ли это.
И в качестве последнего комментария: вставьте операторы отладки в код, где назначается ваша переменная - там вы можете видеть, что assignemnt вызывается, даже если вы не ожидали / не подумали об этом.