BAD_ACCESS上UIPageViewController

问题描述:

我有一个工作UIPageViewController保存嵌入UINavigationController多个UIViewControllers每个UIViewController具有图像阵列的预览至极,打开时,实例化一个新UIPageViewController来显示这些图像BAD_ACCESS上UIPageViewController

时我通过图像刷卡,然后轻扫回用“EXC_BAD_ACCESS(code=EXC_I386_GPFLT)”同样的事情,第一个我的应用程序崩溃时我使用的UINavigationController


后退按钮这是为什么,我该如何解决这一问题?

我PageViewController(标记行最后一个我在调试器中得到了崩溃前):

class DetailPageMasterViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource 
{ 
    var presentationPageIndex: Int = 0 

    var itemsArray = [Aktion]() 
    var pageViewController: UIPageViewController! 

    @IBOutlet weak var btnEditOutlet: UIBarButtonItem! 
    @IBAction func btnEditAction(sender: AnyObject) 
    { 


    } 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     self.pageViewController = UIPageViewController.init(transitionStyle: .Scroll, 
                  navigationOrientation: .Horizontal, 
                  options: nil) 

     self.pageViewController.delegate = self 
     self.pageViewController.dataSource = self 

     self.presentationPageIndex = 0 
     let firstVC = self.viewControllerAtIndex(presentationPageIndex) 
     let viewControllers = [firstVC] 
     self.pageViewController.setViewControllers(viewControllers, 
           direction: .Forward, 
           animated: false, 
           completion: nil) 

     self.addChildViewController(self.pageViewController) 
     self.view.addSubview(self.pageViewController.view) 
     self.pageViewController.didMoveToParentViewController(self) 

     self.setupPageControl() 
    } 

    func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) 
    { 
     if completed 
     { 
      let minionVC = self.pageViewController.viewControllers?.last as! DetailMinionViewController 
      presentationPageIndex = minionVC.pageIndex 
     } 
    } 

    func viewControllerAtIndex(index: Int) -> DetailMinionViewController 
    { 
     let contentVC = self.storyboard?.instantiateViewControllerWithIdentifier("MinionPageViewController") as! DetailMinionViewController 
     contentVC.aktion = itemsArray[index] 
     contentVC.pageIndex = index 

     return contentVC 
    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? 
    { 
     if let viewController = viewController as? DetailMinionViewController 
     { 
      var index = viewController.pageIndex 

      if index == 0 || index == NSNotFound 
      { 
       return nil //MARKED LINE 
      } 

      index -= 1 

      return self.viewControllerAtIndex(index) 
     } 

     return nil 
    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 
    { 
     if let viewController = viewController as? DetailMinionViewController 
     { 
      var index = viewController.pageIndex 

      if index == NSNotFound 
      { 
       return nil 
      } 

      index += 1 

      if index == NSNotFound || index >= itemsArray.count 
      { 
       return nil 
      } 

      return self.viewControllerAtIndex(index) 
     } 

     return nil 
    } 

    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int 
    { 
     return itemsArray.count 
    } 

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int 
    { 
     return presentationPageIndex 
    } 

    func setupPageControl() 
    { 
     UIPageControl.appearance().backgroundColor = UIColor.clearColor() 
     UIPageControl.appearance().pageIndicatorTintColor = UIColor.whiteColor() 
     UIPageControl.appearance().currentPageIndicatorTintColor = UIColor.redColor() 
    } 
} 

所以结构看起来像
UINavigationController - >DetailPageMasterViewController - >DetailMinionViewController - >PicturesPageMasterViewController - >PicturesMinionViewController

+1

后用线,在应用程序崩溃的代码这将是有益的。 – pedrouan

+0

也添加一些代码。 –

+0

现在在if if index == 0 ||之前添加了代码 – Tobi

请检查添加到PageController中的viewController的数量。如果可能,你可以分享你的代码。

+0

检查它,它似乎是正确的 – Tobi

所以我终于想出了什么导致我的应用程序崩溃。

长话短说:
PicturesMinionViewController一个gestureRecognizer试图访问一个已经deinitialized ImageView,我pageViewController工作得很好