Ios 在UIPageViewCotroller中检查前/后滚动时出现错误

Ios 在UIPageViewCotroller中检查前/后滚动时出现错误,ios,swift,uipageviewcontroller,Ios,Swift,Uipageviewcontroller,我正在尝试将适当的图像从数组加载到我的UIPageViewController视图中。 我有3个视图,我循环浏览,以防止崩溃 我会跟踪我是向前滚动还是向后滚动,但有时当我快速地前后滚动时,我会遇到一个错误,它会翻转方向,然后我会得到相同的视图,重复几次滚动 下面是在滚动完成时更新局部变量索引的函数 func pageViewController(pvc: UIPageViewController, didFinishAnimating finished: Bool, previousViewCo

我正在尝试将适当的图像从数组加载到我的
UIPageViewController
视图中。 我有3个视图,我循环浏览,以防止崩溃

我会跟踪我是向前滚动还是向后滚动,但有时当我快速地前后滚动时,我会遇到一个错误,它会翻转方向,然后我会得到相同的视图,重复几次滚动

下面是在滚动完成时更新局部变量索引的函数

func pageViewController(pvc: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
     if completed {
                let thisPage = pvc.viewControllers!.last as! PageContentViewController
                let currentIndex = thisPage.pageIndex

                let lastIndex = lastPage.pageIndex
                  if(currentIndex > urlIndex){   
                    urlIndex += 1
                }else if(currentIndex < urlIndex) {
                    urlIndex -= 1
                }else{

                }
            }
        }

我已经设法解决了这个问题。我已经从
UIPageControllerDelegate
中删除了
pageViewController
函数,只需在我的数据源中更改我的
pageViewController
函数即可从viewController中获得索引

 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{ 
let index = ((viewController as! UIPageContentViewController).pageIndex) - 1
guard index < 0 {
    return nil
}

return getViewControllerAtIndex(index, pageContentViewController: getPreviousViewController() ) 
}
func pageViewController(pageViewController:UIPageViewController,viewControllerBeforeViewController viewController:UIViewController)->UIViewController?
{ 
让索引=((viewController为!UIPageContentViewController).pageIndex)-1
防护指数<0{
归零
}
返回getViewControllerAtIndex(索引,pageContentViewController:getPreviousViewController())
}

它的行为应该是这样的

我已经设法解决了这个问题。我已经从
UIPageControllerDelegate
中删除了
pageViewController
函数,只需在我的数据源中更改我的
pageViewController
函数即可从viewController中获得索引

 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{ 
let index = ((viewController as! UIPageContentViewController).pageIndex) - 1
guard index < 0 {
    return nil
}

return getViewControllerAtIndex(index, pageContentViewController: getPreviousViewController() ) 
}
func pageViewController(pageViewController:UIPageViewController,viewControllerBeforeViewController viewController:UIViewController)->UIViewController?
{ 
让索引=((viewController为!UIPageContentViewController).pageIndex)-1
防护指数<0{
归零
}
返回getViewControllerAtIndex(索引,pageContentViewController:getPreviousViewController())
}

它的行为应该是这样的

我想你把事情弄得比实际情况更复杂了。只要在需要时分配一个新的视图控制器,然后让旧的视图控制器释放出来。@Paulw11我已经试过了。因为我使用haneke swift获取和缓存图像,所以当我刷得太快时,它实际上会导致崩溃。这是我能找到的防止此类崩溃的最简单方法。图像的加载和获取不应与视图控制器的管理相关。你应该解决这个问题crash@Paulw11我曾试图解决崩溃问题,但我认为这是因为即使视图不存在(或者管理内存速度不够快),haneke仍试图完成抓取即使我的内存使用量保持恒定且较低,崩溃也会发生,并且不会返回任何错误。您需要确保您可以保留对视图控制器的引用,并/或选中“无”。在闭包中使用
弱self
可能是导致这种情况的原因之一。我认为,您已经使这种情况变得更加复杂。只要在需要时分配一个新的视图控制器,然后让旧的视图控制器释放出来。@Paulw11我已经试过了。因为我使用haneke swift获取和缓存图像,所以当我刷得太快时,它实际上会导致崩溃。这是我能找到的防止此类崩溃的最简单方法。图像的加载和获取不应与视图控制器的管理相关。你应该解决这个问题crash@Paulw11我曾试图解决崩溃问题,但我认为这是因为即使视图不存在(或者管理内存速度不够快),haneke仍试图完成抓取即使我的内存使用量保持恒定且较低,崩溃也会发生,并且不会返回任何错误。您需要确保您可以保留对视图控制器的引用,并/或选中“无”。在闭包中使用
弱self
可能是导致这种情况的原因之一