Хм. У меня не было проблем в этой ситуации.
Я реализовал это с помощью делегата и протокола, просто методом dismissMe: в родительском объекте, который обрабатывал увольнение, и переменной в дочернем элементе, указывающей на родительский элемент. Когда root установил A, он сказал A, что root был его делегатом; То же самое, когда А настроил Б.
Когда B был готов, он отправил [делегат dismissMe: self]. A dismissMe: отклонил B без анимации, затем отправил [делегат dismissMe: self]. Rom's dismissMe: затем распустил A unanimated. Видимым эффектом было то, что B уступил место корню.
Я могу найти источник из моего репозитория git, если потребуется. Я перешел на другую схему, когда рабочий процесс этого приложения стал более сложным.