Класът на uipageviewcontroller се срива при настройка на повече от един контролер за изглед

Приложението ми продължава да се срива, когато задам повече от един контролер за изглед в приложението си, както по-долу.

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

Моите изображения са масив от контролери за изглед.

Приложението се срива, изписвайки следната грешка. Нямам идея откъде да започна.

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

person Dunes Buggy    schedule 27.06.2013    source източник


Отговори (2)


Както се казва в грешката, вие предоставяте повече контролери за изглед, отколкото е необходимо. Трябва да предоставите само 1 контролер за изглед в масив. След това използвайте методите dataSource на контролера за изглед на страница, за да предоставите правилно контролерите за изглед преди и след.

person Zen    schedule 27.06.2013
comment
Искам да знам на кой изглед контролер е моят потребител и събитие при всяко плъзгане за преминаване към следващия контролер. За това се опитах да използвам -(void) pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers conversionCompleted:(BOOL)completed. Но това не се обажда. Зададох делегата и източника на данни правилно. - person Dunes Buggy; 27.06.2013
comment
Можете да получите текущия екземпляр на контролера за изглед, като стигнете до свойството масив на контролера за изглед на pageViewController като [[pageViewController viewControllers] objectAtIndex:0]; в горния делегат. За да не се извиква делегат, проверете къде сте задали dataSource и делегат. - person Zen; 27.06.2013
comment
Съжалявам, моя грешка. Написах източник на данни два пъти, вместо един източник на данни и делегат в кода. - person Dunes Buggy; 27.06.2013
comment
Чудя се защо методът приема масив, ако позволява само един елемент. - person Eddie Sullivan; 11.02.2016
comment
@EddieSullivan: контролерите за изглед на страница позволяват до два елемента, в случай че свойството му doubleSided е зададено на true и следователно представя два контролера за изглед наведнъж. - person Eric; 12.04.2016
comment
Защо не setViewController вместо това? Защо Apple е толкова неграмотен? - person Pedro Paulo Amorim; 01.06.2017
comment
@EddieSullivan, както някой спомена по-горе, приема две, ако две страници трябва да се показват едновременно. - person David Findlay; 18.04.2018
comment
Зададох контролера за един изглед в масив, но все още съм изправен пред проблема. stackoverflow.com/questions/60501446/ - person Harikarthick K; 03.03.2020

UIPageViewController в iOS има някои грешки. Вместо това използвайте UIScrollView + NSArray на UIViewController! Може би това ще помогне. http://weijun.me/post/develop/2015-11-26

person 邓伟俊    schedule 29.11.2015
comment
Не бих казал, че е толкова бъги, колкото е труден за използване и не е много персонализиран. Бих препоръчал да го използвате само когато искате да имате анимация за обръщане на страница. Ако искате изглед за превъртане на страници с нормално превъртане и pageControl, отколкото UIScrollView е по-лесен за използване. - person moger777; 10.03.2018