Лучшее решение, если вы можете управлять им, - это попытаться пересмотреть ваш код, чтобы не имело значения, был ли контроллер просто выдвинут или его дочерний элемент был просто вытолкнут. По сути, контроллер представления является посредником между его представлением и данными, с которыми работает приложение. Пока эти данные актуальны, контроллеру не следует беспокоиться о том, что происходило до появления его представления. Задачи, которые в настоящее время выполняет ваш контроллер на основе предыдущего состояния приложения, например обновление данных, могут действительно лучше располагаться в другом классе.
Другая возможность, если вы используете раскадровки, это полагаться на -prepareForSegue:sender:
вместо -viewDidAppear
. Последовательность, которую вы передаете в этом методе, имеет свойства, которые идентифицируют контроллеры представления источника и назначения, и обычно этой информации достаточно, чтобы рассказать вам, как ваш контроллер стал текущим.
Если ни один из них не работает в вашем случае, рассмотрите возможность переноса кода конфигурации одним или несколькими различными способами. Корень проблемы, с которой вы сталкиваетесь, в том, что -viewWillAppear
действительно не означает, что вам нужно. Создайте метод, который действительно означает то, что вам нужно, например -childControllerFinished
, и используйте , что , чтобы выполнить настройку, необходимую вам.