Сбой класса 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 предыдущиеViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed. Но это не вызывается. Я правильно установил делегат и источник данных. - person Dunes Buggy; 27.06.2013
comment
Вы можете получить текущий экземпляр контроллера представления, перейдя к свойству массива контроллеров представления pageViewController как [[pageViewController viewControllers] objectAtIndex:0]; в приведенном выше делегате. Чтобы делегат не вызывал, проверьте, где вы установили источник данных и делегат. - 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