Вы неправильно управляете своей иерархией контроллера представления. Контроллер навигации никогда не должен иметь петли, как показывает ваша диаграмма.
Кроме того, навигационный контроллер должен управлять визуальной иерархией первой и логической одной секундой. Например. Приложение контактов, в котором представление списка групп выдвигает список контактов, который выдвигает контактную информацию, которая выдвигает одно из нескольких представлений редактирования подробностей атрибута. Каждый раз, когда вы покидаете один вид, вы открываете этот вид и возвращаетесь вверх по иерархии к предыдущему виду. Вы никогда не настроите его, перейдя от одного вида сведений о контакте к следующему виду контакта, просто нажав на другое представление сведений о контакте поверх последнего представления сведений о контракте.
Точно так же вам нужно вытолкнуть существующий BoardVC
или LevelVC
из стека, прежде чем нажимать следующий.
(Ключ: здесь -> означает нажатие, а <- означает всплывающее окно) </p>
Чтобы настроить первый уровень новой игры, вы должны:
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC
... а затем добавить следующий уровень, который вы сначала:
RootVC-->NewGameVC-->GameVC-->BoardVC<--LevelOneVC
... чтобы получить:
RootVC-->NewGameVC-->GameVC-->BoardVC
... а затем:
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelTwoVC
... повторить для всех остальных уровней. Вы можете сделать то же самое для каждого BoardVC
по мере необходимости.
Хитрость здесь в том, чтобы не использовать слайд-переход, который является переходом контроллера навигации по умолчанию. Этот переход говорит пользователю ожидать этого логического макета:
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC-->LevelTwoVC
... что является причиной вашей проблемы. Вместо этого используйте другой переход, такой как исчезновение или скрытие перехода все вместе.
Путем выталкивания любых представлений, которые не нужны для навигации пользователя, вы гарантируете, что в стеке контроллеров никогда не бывает более 5 контроллеров представления в любой момент времени и, следовательно, в памяти требуется только 5 контроллеров представления.