2013-12-18 108 views
0

我要使用UIPageViewController製作教程頁面。使用故事板崩潰的UIPageviewController

但是發生了事故。我無法找到發生崩潰的點。

我想直接使用UIPageViwController,而不是在UIViewController中使用。

dataSource works。但是當試圖調用[self setViewControllers:@ [pageZero] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; ,發生如下錯誤。

UserGuidePageViewController鏈接到右舷的UIPagveViewController框架。

以下爲部首

#import <UIKit/UIKit.h> 

@interface UserGuidePageViewController : UIPageViewController <UIPageViewControllerDataSource> { 

} 


@end 

以下是代碼

#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; 
} 

誤差以下。

*** 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 

其實我改成了Xcode模板樣式。

但是這個錯誤也發生了。

- (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]; 
} 

我不知道是什麼問題。當選擇UIPageViewControllerTransitionStyleScroll時,發生錯誤。當選擇UIPageViewControllerTransitionStylePageCurl時,錯誤不會發生。

+0

你也應該改變你的包從零到'[NSBundle mainBundle]'我認爲編輯:對不起,只是閱讀文檔,如果你指定nil它自動看故事板的mainBundle – dehlen

回答

0

我在ContentViewController處發現了loadView() { }。但loadView()保持爲空而不呼叫[super loadView];。因此,視圖將保持nil

現在看來在刪除方法loadView()後工作。

1
@interface UserGuidePageViewController : UIPageViewController <UIPageViewControllerDataSource> { 

chnge與

@interface UserGuidePageViewController : UIViewController <UIPageViewControllerDataSource> { 

此行意味着你可以使用的UIViewController這個

看到this鏈接以供參考。

和另一個link它是使用故事板。

+0

是否有唯一的方法來使用UIViewController?我在新項目中檢查了模板代碼。我試圖使用UIPageViewController,因爲它似乎使用UIPageViewController而沒有爲UIPageViewController聲明屬性。 – mkjwa

+0

這[鏈接](http://stackoverflow.com/questions/18398796/uipageviewcontroller-and-storyboard?rq=1)似乎直接擴展UIPageViewController,但它有另一個問題。 – mkjwa

+0

對不起親愛的,我沒有使用這個像擴展uipageviewcontroller。 –

相關問題