Ошибка неправильного доступа UIPageViewController

Я знаю, что ошибка означает, что у меня есть указатель NULL, но я не уверен, ПОЧЕМУ это так, и я предполагаю, что это должно быть что-то, что я сделал неправильно в своем коде. Мой индекс начинается с 1, потому что я хочу, чтобы он начинался в контроллере среднего представления, который является домашней страницей. Я пытаюсь заставить контроллер просмотра страницы переключаться между контроллерами просмотра, похожими на Snapchat. У меня есть следующий код:

import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {

  var viewControllersArray = [UIViewController]()
  var pageIndex: Int?
  let selectedIndex = 1

  override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = UIColor.clearColor()

    let vc1 = storyboard?.instantiateViewControllerWithIdentifier("ProfileView") as! ProfileViewController
    let vc2 = storyboard?.instantiateViewControllerWithIdentifier("HomeView") as! HomeViewController
    let vc3 = storyboard?.instantiateViewControllerWithIdentifier("MatchesView") as! MatchViewController

    viewControllersArray.append(vc1)
    viewControllersArray.append(vc2)
    viewControllersArray.append(vc3)

    self.dataSource = self

    let pageContentViewController = self.viewControllerAtIndex(selectedIndex)
    self.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)  //Error here

  }

ошибка возникает в этой строке:

self.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)  //Error here

Ошибка выглядит следующим образом: «Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7fff58d57ff8)

Вот моя функция viewControllerAtIndex:

func viewControllerAtIndex(index : Int) -> UIViewController? {
   if((self.viewControllersArray.count == 0) || (index >= self.viewControllersArray.count)) {
     return nil
   }

   let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! PageViewController
   pageContentViewController.pageIndex = index


   return pageContentViewController
}

Вот моя раскадровка с контроллерами представления, между которыми можно переключаться:

введите здесь описание изображения

Любая помощь приветствуется!


person evanhaus    schedule 18.07.2016    source источник
comment
Где ваш контроллер представления в функции индекса и почему индекс начинается с 1, а не с 0?   -  person Wyetro    schedule 18.07.2016
comment
@WMios Я только что добавил правки   -  person evanhaus    schedule 19.07.2016
comment
Можете ли вы также включить трассировку стека с фактической ошибкой?   -  person Wyetro    schedule 19.07.2016


Ответы (1)


Это выглядит как

func viewControllerAtIndex(index : Int) -> UIViewController? {
   if((self.viewControllersArray.count == 0) || (index >= self.viewControllersArray.count)) {
     return nil
   }

   let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! PageViewController
   pageContentViewController.pageIndex = index


   return pageContentViewController
}

Должно быть:

func viewControllerAtIndex(index : Int) -> UIViewController? {
   if((self.viewControllersArray.count == 0) || (index >= self.viewControllersArray.count)) {
     return nil
   }

   return viewControllersArray[index]
}

Кроме того

let selectedIndex = 1

должно быть

let selectedIndex = 0

так как 1 будет ссылаться на вторую страницу.

person Wyetro    schedule 18.07.2016