Dunes Buggy
Dunes Buggy

Reputation: 1819

uipageviewcontroller class crashing on setting more than one view controllers

My app keeps crashing, when I set more than one view controller in my app, like below.

[self setViewControllers:_images direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

My images is an array of view controllers.

The app crashes saying the following error. I have no idea where to start.

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

Upvotes: 43

Views: 23685

Answers (3)

tBug
tBug

Reputation: 827

ok, this is the problem.

In your View Controller, you will have something like this.

private var mainPageView : UIPageViewController!

private var arrayOfVC = [UIViewController]()

now, if you try to set an array of VC (View Controllers) like this:

   self.mainPageView.setViewControllers(arrayOfVC, direction: .forward, animated: true, completion: nil)

There will be an error something like this:

'The number of view controllers provided (9) doesn't match the number required (1) for the requested transition

So, to fix this problem you need to set first VC from an array of VC's

self.mainPageView.setViewControllers([arrayOfVC[0]], direction: .forward, animated: true, completion: nil)

And handle the rest in Page View Delegate and Data Source.

That is all :)

p.s. SWIFT - 5.5

Upvotes: 1

邓伟俊
邓伟俊

Reputation: 11

UIPageViewController in iOS has some bugs. Use UIScrollView + NSArray of UIViewController instead! Maybe this will help. http://weijun.me/post/develop/2015-11-26

Upvotes: -7

Zen
Zen

Reputation: 3117

As the error says,you are providing more view controllers than needed. You should provide only 1 view controller in an array. Then use page view controller's dataSource methods to provide before and after view controllers properly.

Upvotes: 82

Related Questions