如何防止UIPageViewController的setViewControllers方法崩溃?

时间:2015-12-25 22:08:41

标签: ios swift cocoa-touch

我正在尝试让UIPageViewController第一次工作,但每当我尝试设置其视图控制器时,我似乎都遇到了麻烦。

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    let leftViewController = storyboard?.instantiateViewControllerWithIdentifier("LeftViewController")
    let rightViewController = storyboard?.instantiateViewControllerWithIdentifier("RightViewController")

    let viewControllerArray: [UIViewController] = [leftViewController!, rightViewController!]

    self.setViewControllers(viewControllerArray, direction: .Forward, animated: true, completion: nil)
}

每次到达setViewControllers()方法时,应用都会在AppDelegate文件中崩溃,并显示以下错误日志:

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

23  UIKit                               0x0000000103a06610 UIApplicationMain + 171
24  PageViewTesting                     0x000000010300649d main + 109
25  libdyld.dylib                       0x0000000105a3292d start + 1
26  ???                                 0x0000000000000001 0x0 + 1)
libc++abi.dylib: terminating with uncaught exception of type NSException

我的故事板中目前有一个UIPageViewController和两个UIViewControllers。我已经仔细检查过他们的ID以及instantiateViewControllerWithIdentifier()方法的正确性。

为什么我收到此错误的任何想法?

1 个答案:

答案 0 :(得分:1)

来自UIPageViewController的课程参考:

// setViewControllers:direction:animated:completion:
func setViewControllers(_ viewControllers: [UIViewController]?,
          direction direction: UIPageViewControllerNavigationDirection,
           animated animated: Bool,
         completion completion: ((Bool) -> Void)?)
  

传递给此方法的视图控制器将是那些   动画完成后可见。 使用数据源   提供用户导航的其他视图控制器

对于单视图控制器视图模式,代码中使用的方法.setViewControllers仅采用单个视图控制器(但是,在数组表单上)。参数采用数组[UIViewController]有点令人困惑,但这是为了在使用脊椎(中间)视图时使用PageViewController的doubleSided属性。

  

定义页面视图控制器界面时,可以提供   内容视图控制器一次一个(或一次两个,取决于   在脊椎位置和双侧状态)

     

...

     

UIPageViewControllerSpineLocationMid

     

在中间或中间脊柱   屏幕。

     

一次显示两个视图控制器。

您打算使用脊椎中视图吗?在这种情况下,您可以发送两个视图控制器,否则,您应该发送一个并使用数据源添加其他视图控制器。