2

雑誌タイプのアプリを表示する次のコードがあります。アプリがローテーションされると、このコードが実行されます。サポートされている向きに回転した場合にのみ実行されるようにしました。この関数が戻ると、アプリは SIGABRT で失敗します。理由については他に何も示されていません。

削除してもプログラムが失敗しないため、この機能であることはわかっています。

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
                   spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
    //If portrait mode, change to single page view
    if(UIInterfaceOrientationIsPortrait(orientation)){
        UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
         NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
         [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

         self.pageViewController.doubleSided = NO;

        return UIPageViewControllerSpineLocationMin;
    //If landscape mode, change to double page view    
    }else{
        //Get current view 
        UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];

        //Create an array to store, views
        NSArray *viewControllers = nil;

         NSUInteger currentIndex = self.currentPage;

        //Conditional to check if needs page before or after
         if(currentIndex == 1 || currentIndex %2 == 1){
             UIViewController *nextViewController = [self pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController];
             viewControllers = [NSArray arrayWithObjects:currentViewController,nextViewController, nil];
         }else{
             UIViewController *previousViewController = [self pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController];
             viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
         }

        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
        return UIPageViewControllerSpineLocationMid;

    }
    //return UIPageViewControllerSpineLocationMid;
}
4

3 に答える 3

1

残念ながら、borrrden はおそらく正しいでしょう。IBOutlets の 1 つが XIB にない可能性があります。すべての IB が適切に接続されていることを確認してください。問題が続く場合は、そう言ってください。

于 2012-04-19T01:24:06.427 に答える
0

コンソールからの出力を提供していませんでした。コードをざっと見てみると、コントローラーの 1 つ (次または前) が nil であると推測できます。nil を NSArray に挿入できないため (最後のオブジェクトを除く)、エラーがスローされます。

編集まあ、私の推測は間違っていました。エラー メッセージは、指定している UIViewControllers が、ページ コントローラーが必要とする向きをサポートしていないことを示しています。これはshouldRotateToInterfaceOrientation:、子 UIViewControllers で呼び出されたメソッドがあり、(この場合) 左の横向きに対して no を返しているためです。

于 2012-04-19T01:20:41.330 に答える
0

同じエラーが発生していました

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'All provided view controllers ((
    "<ContentViewController: 0x6a7eac0>",
    "<ContentViewController: 0x6d89f10>"
)) must support the pending interface orientation (UIInterfaceOrientationLandscapeLeft)'

ページレイアウトが設計されているPageModelクラスに次を追加すると、うまくいきました。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
于 2013-03-07T09:08:46.070 に答える