5

当用户在 a 的第一页UIPageViewController并试图返回时,我只返回 nil。在 iOS 5 中,这可以正常工作。它导致 iOS 6 崩溃。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (0) doesn't match the number required (1) for the requested transition'

这是我的代码。当返回contentViewController而不是 时nil,它工作正常。我应该放什么代替nil

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
  viewControllerBeforeViewController:(UIViewController *)viewController {

    contentViewController = [[ContentViewController_iPhone alloc] init];

    int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]];

    if ((currentIndex == 0) || (currentIndex == NSNotFound)) {

        //if on the first page, can't go back
        return nil;

     }

    contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1];

    return contentViewController;

}
4

3 回答 3

10

我遇到了同样的问题,发现只有当我将 pageviewcontrollersgestureRecognizers 的代表更改为我自己的控制器时才会发生这种情况(如果您想在用户点击页面上的某些区域时取消分页,通常会这样做,例如按钮)。

对我来说,不为 iOS 6 重新分配是可行的。这很好,因为 iOS 处理触摸有点不同。页面上的按钮或您自己的手势识别器将在 iOS 6 下正常工作,因为它们具有优先级并会自动取消分页。

我希望这有帮助。

于 2012-10-13T11:05:10.763 回答
0

您需要将以下内容添加到您的代码中

if (currentIndex == 0 || (index == NSNotFound)) {

    //if on the first page, can't go back
    return nil;

 }
于 2012-10-08T18:12:35.210 回答
0

最新版本的 Xcode Page Based Application 模板提供以下代码:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
    if ((index == 0) || (index == NSNotFound)) {
    return nil;
}

index--;
return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}

这应该够了吧 :-)

于 2012-10-08T18:33:38.290 回答