0
votes

I'm gonna make a tutorial page using UIPageViewController.

But crash happened. I couldn't find the point occurring crash.

I'm trying to use UIPageViwController directly, not using in UIViewController.

dataSource works. but when trying to call [self setViewControllers:@[pageZero] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; , an error occurred like the below.

UserGuidePageViewController is linked to UIPagveViewController Frame in starboard.

Following is Header

#import <UIKit/UIKit.h>

@interface UserGuidePageViewController : UIPageViewController <UIPageViewControllerDataSource> {

}


@end

Following is code

#import "UserGuidePageViewController.h"
#import "UserGuideViewController.h"


@interface UserGuidePageViewController () {

}

@property (nonatomic, retain) NSArray *array;

@end

@implementation UserGuidePageViewController


- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];

    if (self) {
        self.dataSource = self;
    }

    return self;
}

- (UserGuideViewController *)userGuideViewForPageIndex:(NSUInteger)pageIndex
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UserGuideViewController *targetViewController = [storyboard instantiateViewControllerWithIdentifier:@"UserGuideViewController"];

    return targetViewController;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    UserGuideViewController *pageZero = [self userGuideViewForPageIndex:0];

    [self setViewControllers:@[pageZero] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
    --> Crash happened here!!!
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Page View Controller Data Source

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = [(UserGuideViewController *)viewController pageIndex];

    return [self userGuideViewForPageIndex:(index - 1)];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = [(UserGuideViewController *)viewController pageIndex];

    return [self userGuideViewForPageIndex:(index + 1)];
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    // The number of items reflected in the page indicator.
    return 1;
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    // The selected item reflected in the page indicator.
    return 0;
}

Error is following.

*** Assertion failure in -[_UIQueuingScrollView setView:direction:animated:completion:], /SourceCache/UIKit/UIKit-2903.23/_UIQueuingScrollView.m:671
2013-12-18 15:23:35.779 Natural Calendar[4497:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: view'
*** First throw call stack:
(0x30ef6f4b 0x3b6d36af 0x30ef6e25 0x3189efe3 0x33ba3321 0x33b382eb 0x33b38407 0xf4715 0x3366e37b 0x3366e139 0xf0c45 0x1062d9 0x1106c3 0x3369e713 0x3369e6b3 0x3369e691 0x3368a11f 0x3369e107 0x3369ddd9 0x33698e65 0x3366e79d 0x3366cfa3 0x30ec2183 0x30ec1653 0x30ebfe47 0x30e2ac27 0x30e2aa0b 0x35b0b283 0x336ce049 0xecd09 0x3bbdbab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

Actually, I changed into Xcode template style.

But this error is also occurred.

- (void)viewDidLoad
{
    [super viewDidLoad];

    _pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
    [_pageViewController setDataSource:self];

    UserGuideViewController *pageZero = [self userGuideViewForPageIndex:0];

    [_pageViewController setViewControllers:@[pageZero] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

    [self addChildViewController:_pageViewController];
    [self.view addSubview:[_pageViewController view]];

    CGRect pageViewRect = self.view.bounds;
    //pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
    _pageViewController.view.frame = pageViewRect;

    [_pageViewController didMoveToParentViewController:self];
}

I don't know what's problem. When choosing UIPageViewControllerTransitionStyleScroll, the error occurred. When choosing UIPageViewControllerTransitionStylePageCurl, the error is not happened.

2
you should also change your bundle from nil to [NSBundle mainBundle] i think EDIT: sorry just read the documentation if you specifiy nil it automatically looks in the mainBundle for the storyboarddehlen

2 Answers

1
votes
@interface UserGuidePageViewController : UIPageViewController <UIPageViewControllerDataSource> {

chnge this line with

@interface UserGuidePageViewController : UIViewController <UIPageViewControllerDataSource> {

Means you can use UIViewcontroller for this

see this link for reference.

and this another link which is used storyboard.

0
votes

I found loadView() { } declared at page ContentViewController. However loadView() remains empty without calling [super loadView];. As a result from this, the view would remain nil.

Now it appears to work after the removal of the method, loadView().