Использование кнопки для изменения PageViewController приводит к сбою приложения на последней странице - PullRequest
0 голосов
/ 19 мая 2019

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

func backBtnClicked() {
        if currentIndex > 0 {
            currentIndex -= 1
        }
        if currentIndex < 1 {
            backBtn.isHidden = true
        }
        if currentIndex >= 0 {
            nextBtn.setTitle("Next", for: .normal)
            let startingViewController: TableVC? = viewControllerAtIndex(index: currentIndex)
            let viewControllers = [startingViewController]
            pageController?.setViewControllers(viewControllers as? [UIViewController], direction: .reverse, animated: false)
        }

    }

    @objc func nextBtnClicked() {
        if currentIndex != NSNotFound {
            currentIndex += 1
        }

        if currentIndex == pg.count - 1 {
            //Navigate Outside Pageview controller
            log("lastt")
        } else {


            let startingViewController: TableVC? = viewControllerAtIndex(index: currentIndex)
            let viewControllers = [startingViewController]
            pageController?.setViewControllers(viewControllers as? [UIViewController], direction: .forward, animated: false)
        }

    }

Это ошибка, которую я получаю

Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: 'Количество контроллеров представления при условии (0) не соответствует требуемому номеру (1) для запрошенного переход '

любая помощь

1 Ответ

0 голосов
/ 19 мая 2019

Заменить

pageController?.setViewControllers(viewControllers as? [UIViewController], direction: .forward, animated: false)

на

pageController?.setViewControllers(viewControllers, direction: .forward, animated: false)

На

let startingViewController = viewControllerAtIndex(index: currentIndex)!
pageController?.setViewControllers([startingViewController], direction: .forward, animated: false)

В обратном направлении

guard currentIndex - 1 >= 0 else { return }
currentIndex -= 1
// get the vc 

Вследующее нажатие

guard currentIndex + 1 < pg.count else { return }
currentIndex  += 1
// get the vc

В вашем текущем коде кажется, что этот let startingViewController: TableVC? возвращает ноль в некоторой точке, что делает этот viewControllers as? [UIViewController] пустым массивом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...