簡體   English   中英

UIPageViewController上的BAD_ACCESS

[英]BAD_ACCESS on UIPageViewController

我有一個工作正常的UIPageViewController ,該UIPageViewController包含嵌入在UINavigationController中的多個UIViewControllers ,並且每個UIViewController都有一個圖像陣列的預覽,當打開時,實例化一個新的UIPageViewController以顯示這些圖像

當我EXC_BAD_ACCESS(code=EXC_I386_GPFLT)圖像然后EXC_BAD_ACCESS(code=EXC_I386_GPFLT)回第一張圖像時,當我使用UINavigationController的后退按鈕時,我的應用程序因“ EXC_BAD_ACCESS(code=EXC_I386_GPFLT) ”而崩潰


為什么會這樣,我該如何解決?

我的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

因此,我終於弄清楚了導致我的應用崩潰的原因。

長話短說:
一個gestureRecognizerPicturesMinionViewController試圖訪問一個已經deinitialized ImageView ,我pageViewController運行良好

請檢查添加到PageController中的viewController的數量。 如果可能,您可以共享您的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM