2012-03-16 18 views
5

Estoy en Monotouch 5.2.6 y iOS SDK 5.0.1.NSInternalInconsistencyException de UIPageViewController al girar

Tengo un UIPageViewController que es un contenedor secundario de otro controlador de vista. Se crea de esta manera:

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

Si gira el dispositivo (simulador), me sale esta excepción en UIApplication.SendEvent():

excepción de Objective-C tirado. Nombre: NSInternalInconsistencyException Motivo: El número de controladores de vista proporcionados (1) no coincide con el número requerido (2) para la ubicación de la columna vertebral solicitado (UIPageViewControllerSpineLocationMid)

La ubicación columna vertebral no es "medio", pero "min". ¿Algunas ideas?

Respuesta

4

Es cierto que ha inicializado UIPageViewController con "Min" como ubicación de la columna vertebral. Sin embargo, es necesario implementar un delegado para el controlador de página y anular el GetSpineLocation método: (! MonoTouch el cielo)

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

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

} 

O, asignar un método para su GetSpineLocation propiedad:

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

Aún así, se ve un comportamiento un poco inesperado. Supongo que la implementación predeterminada del método nativo pageViewController:spineLocationForInterfaceOrientation: devuelve "Mid" cuando el dispositivo gira a horizontal (aunque no pudo encontrar información en los documentos de Apple). De todos modos, debe anular el método anterior para hacerlo bien.

+0

¡Quizás debería comprar su libro a pesar de que me considero un experimentado desarrollador de MT! :-) – Krumelur

+0

Hehe, ¡los libros siempre son útiles ...! ;) –

0

Para estar seguro, verifiqué los valores de UIPageViewControllerSpineLocation y coinciden con los valores de documentation de Apple.

También Dimitris es correcto, el valor predeterminado interna, delegado (cuando no se proporciona) devuelve UIPageViewControllerSpineLocation.Mid cuando no se especifica una devolución de llamada proporcionado por el usuario (es decir, cuando UIPageViewController.GetSpineLocation no está asignado).

Es código de enlace autogenerado por lo que es un poco complicado no devolver una constante para el caso predeterminado, nada provisto. Sin embargo, siéntase libre de abrir un informe de error (y enlace a esta pregunta) y lo veremos.

Cuestiones relacionadas