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

私は同じ問題を抱えていて、 pageviewcontrollers のgestureRecognizers のデリゲートを自分のコントローラーに変更した場合にのみ発生することがわかりました(これは、ユーザーがページ上の特定の領域、たとえば、ボタンをタップしたときにページングをキャンセルしたい場合によく行われます)。

私にとっては、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 ページ ベースのアプリケーション テンプレートの最新バージョンでは、次のコードが提供されます。

- (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 に答える