2012-03-16 5 views
5

Sono su Monotouch 5.2.6 e iOS SDK 5.0.1.NSInternalInconsistencyException da UIPageViewController durante la rotazione

Ho un UIPageViewController che è un contenitore figlio di un altro controller di visualizzazione. Si è creato in questo modo:

pageViewController = new UIPageViewController (UIPageViewControllerTransitionStyle.PageCurl, UIPageViewControllerNavigationOrientation.Horizontal, UIPageViewControllerSpineLocation.Min); 
    this.AddChildViewController (pageViewController); 
    pageViewController.DidMoveToParentViewController (this); 
    this.viewCurrentMode.AddSubview (pageViewController.View); 

Se ho ruotare il dispositivo (Simulator), ottengo questa eccezione in UIApplication.SendEvent():

eccezione Objective-C gettato. Nome: NSInternalInconsistencyException Motivo: Il numero di controller di vista forniti (1) non corrisponde al numero di richiesto (2) per la posizione della colonna vertebrale richiesto (UIPageViewControllerSpineLocationMid)

La posizione della colonna vertebrale non è "a metà", ma "min". Qualche idea?

risposta

4

Vero, è stato inizializzato UIPageViewController con "Min" come posizione della colonna vertebrale. Tuttavia, è necessario implementare un delegato per il controller della pagina e sovrascrivere il metodo GetSpineLocation: (! MonoTouch cielo)

public override UIPageViewControllerSpineLocation GetSpineLocation (UIPageViewController pageViewController, UIInterfaceOrientation orientation) 
{ 

    //return spine location according to interface orientation and whatever 
    //criteria you prefer 

} 

Oppure, assegnare un metodo per la sua GetSpineLocation proprietà:

pageViewController.GetSpineLocation = (p, o) => return <spinelocation>; 

Eppure, sembra un comportamento un po 'inaspettato. Presumo che l'implementazione predefinita del metodo nativo pageViewController:spineLocationForInterfaceOrientation: restituisca "Metà" quando il dispositivo ruota in orizzontale (sebbene non sia stato possibile trovare informazioni nei documenti Apple). Ad ogni modo, è necessario sovrascrivere il metodo sopra per farlo bene.

+0

Forse dovrei comprare il tuo libro anche se mi considero uno sviluppatore esperto di MT! :-) – Krumelur

+0

Hehe, i libri sono sempre utili ...! ;) –

0

Per sicurezza ho controllato i valori per UIPageViewControllerSpineLocation e corrispondono ai valori di Apple documentation.

anche Dimitris è giusto, il difetto interna, delegato (quando non è previsto) restituisce UIPageViewControllerSpineLocation.Mid quando un callback fornita dall'utente non viene specificata (cioè quando non viene configurato UIPageViewController.GetSpineLocation).

Questo è il codice di associazione generato automaticamente, quindi è un po 'complicato non restituire una costante per l'impostazione predefinita, nessuna condizione, caso. Comunque sentiti libero di aprire una segnalazione di bug (e link a questa domanda) e daremo un'occhiata a questo.