2012-10-08 29 views
5

當用戶在UIPageViewController的第一頁上並試圖返回時,我只返回nil。在iOS 5中,這工作正常。它導致iOS 6崩潰。如何在UIPageViewController中設置第一頁

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

這是我的代碼。當返回contentViewController而不是nil時,它工作正常。我應該放什麼而不是nil

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
    viewControllerBeforeViewController:(UIViewController *)viewController { 

    contentViewController = [[ContentViewController_iPhone alloc] init]; 

    int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]]; 

    if ((currentIndex == 0) || (currentIndex == NSNotFound)) { 

     //if on the first page, can't go back 
     return nil; 

    } 

    contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1]; 

    return contentViewController; 

} 
+0

你能簡單地返回'self'而不是'nil'嗎?這是我的猜想。 –

+0

@JoshuaSmith我試過了,但我仍然有同樣的問題。不過謝謝。 –

+0

返回'nil'就是Apple的「基於頁面的應用程序」項目模板如何處理第一頁和最後一頁。我認爲你還有其他問題。設置異常斷點併發布異常的完整堆棧軌道。 –

回答

10

我有同樣的問題,發現它只發生,如果我改變頁面的代表將控制器的gestureRecognizers添加到我自己的控制器中(如果您想在用戶點擊頁面上的某些區域時取消分頁,通常會執行此操作,例如按鈕)。

對我來說,它不會爲iOS 6做這個重新分配。這很好,因爲iOS處理觸摸有點不同。按鈕或您自己的手勢識別器可以在iOS 6下正常工作,因爲它們具有優先權並且會自動取消分頁。

我希望這會有所幫助。

+0

我會稍後再試。你說按鈕和我自己的手勢識別器將在iOS 6中享有優先權......這是否也是iOS 5的改變?謝謝。 –

+0

@Jack:是的,我認爲這是一個變化(以及爲什麼我認爲舊方法不再需要的情況下,大多數情況下) –

+0

剛剛有機會嘗試這個,它的工作。謝謝! –

0

您需要添加以下代碼

if (currentIndex == 0 || (index == NSNotFound)) { 

    //if on the first page, can't go back 
    return nil; 

} 
+0

對不起,這沒有奏效。它仍然崩潰。返回'nil'是問題。它出於某種原因不喜歡它。 if語句不需要改變。 –

+0

你可以在零處放置一個斷點,並檢查它是否進入這個區塊? –

+0

就是這樣,我之前使用了一個'NSLog'並輸出了它的內容。再次,所有這些在iOS 5中運行良好。它是導致問題的iOS 6。 –

0

最新版本的Xcode頁基於應用程序的模板提供了以下代碼:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController]; 
    if ((index == 0) || (index == NSNotFound)) { 
    return nil; 
} 

index--; 
return [self viewControllerAtIndex:index storyboard:viewController.storyboard]; 
} 

這應該做的伎倆: - )

+0

謝謝,但沒有奏效。返回'nil'會導致問題。當我返回的值不是'nil'時,它工作正常。如果nil不起作用,我該如何阻止它進入第一頁之前的頁面? –

相關問題