2012-10-08 26 views
5

Quando l'utente si trova nella prima pagina di un UIPageViewController e tenta di tornare indietro, restituisco semplicemente nil. In iOS 5 funziona bene. Sta causando un arresto in iOS 6.Come impostare la prima pagina in 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' 

Ecco il mio codice. Quando si restituisce contentViewController anziché nil, funziona correttamente. Cosa dovrei inserire al posto di 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

Puoi semplicemente restituire 'self' invece di' nil'? Questa è una congettura da parte mia. –

+0

@JoshuaSmith L'ho provato, ma sto ancora avendo lo stesso problema. Grazie comunque. –

+0

Restituire 'nil' è esattamente il modo in cui il modello di progetto" Applicazione basata su pagina "di Apple gestisce la prima e l'ultima pagina. Penso che tu abbia qualche altro problema. Imposta un punto di interruzione di eccezione e pubblica la traccia stack completa dell'eccezione. –

risposta

10

Ho avuto lo stesso problema e ho scoperto che succede solo se cambio i delegati del pagev iecontroller gestiscono i riconoscimenti per il mio controller (ciò avviene spesso se si desidera annullare la funzione di cercapersone quando un utente tocca determinate aree della pagina, ad es. pulsanti).

Per me ha funzionato per non eseguire questa riassegnazione per iOS 6. Va bene, dato che iOS gestisce un tocco leggermente diverso. I pulsanti o i propri riconoscimenti di gesti sulla pagina funzioneranno correttamente in iOS 6 poiché hanno la priorità e annulleranno automaticamente il paging.

Spero che questo aiuti.

+0

Ci proverò più tardi. Hai detto che i pulsanti e i miei riconoscimenti di gesti avranno priorità in iOS 6 ... è anche questo un cambiamento da iOS 5? Grazie. –

+0

@Jack: sì, penso che sia un cambiamento (e il motivo per cui penso che il vecchio approccio non sia più necessario nella maggior parte dei casi) –

+0

Ho appena avuto la possibilità di provare questo e ha funzionato. Grazie! –

0

è necessario aggiungere il seguente al codice

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

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

} 
+0

Scusa, non ha funzionato. Si blocca ancora. Restituire 'nil' è il problema. Non gli piace per qualche motivo. L'istruzione if non ha bisogno di essere modificata. –

+0

Puoi inserire un punto di interruzione a zero e controllare se sta anche entrando in questo blocco? –

+0

È, ho usato un 'NSLog' prima e ha emesso il suo contenuto. Ancora una volta, tutto ciò ha funzionato bene su iOS 5. È iOS 6 che sta causando problemi. –

0

Ultima versione di Xcode pagina basata Applicazione modello fornisce il seguente codice:

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

Questo dovrebbe fare il trucco: -)

+0

Grazie, ma non ha funzionato. Restituire 'nil' causa il problema. Quando restituisco un valore diverso da 'nil', funziona correttamente. Come posso evitare di andare alla pagina prima della prima pagina se nil non funziona? –

Problemi correlati