Краевое состояние при выполнении обратного вызова для UINagivationController / interactivePopGestureRecognizer проведите назад

Так что у меня есть UINavigationController, который управляет push и pop некоторых других UIViewController, и interactivePopGestureRecognizer.isEnabled установлен в true таким образом, пользователь может "провести пальцем влево", чтобы всплыть.

Для краткости, скажем, у меня есть следующее UIViewControllers:

  • OverviewController - показывает список виджетов
  • DetailsViewController - показывает детали одного из виджетов

Так что все ведет себя нормально, когда UINavigationController толкает на DetailsViewController на вершине стека. Но когда DetailsViewController необходимо выскочить, когда пользователь проведет пальцем влево, есть "край" условие, которое вызывает сохранение данных и проблемы с отображением в оригинале OverviewController,

По сути, происходит следующее: если пользователь нажимает кнопку "назад", все работает нормально... код, который выполняется до того, как представление выскочило, работает правильно. Но если пользователь проводит пальцем влево, код обратного вызова, который выполняет те же шаги, кажется, не работает должным образом (код внутри DetailsViewController):

@IBAction func done(_ sender: Any)
{
    // saves changes to widget
    MyDataStore.sharedManager.save();

    navigationController?.popViewController(animated: true);
    delegate?.reloadData();

}

Эта функция срабатывает, когда пользователь нажимает кнопку "назад", и все работает отлично.

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    if let coordinator = navigationController.topViewController?.transitionCoordinator
    {
        coordinator.notifyWhenInteractionEnds(
            {
                (context) in

                MyDataStore.sharedManager.save()

                self.delegate?.reloadData();
        })
    }
}

Это не работает должным образом - странные данные отображаются в OverviewController (как будто он не был сохранен должным образом) и анимация перезагрузки в OverviewController обрывается Это почти как будто происходит гонка или крайние условия.

Любое понимание того, как обойти это?

0 ответов

Другие вопросы по тегам