2012-03-16 12 views
5

Jestem na Monotouch 5.2.6 i iOS SDK 5.0.1.NSInternalInconsistencyException z UIPageViewController podczas obracania

Mam UIPageViewController, który jest kontenerem podrzędnym innego kontrolera widoku. jest tworzony tak:

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

Jeżeli obrócić urządzenia (symulator), pojawia się to wyjątek w UIApplication.SendEvent():

celu C wyjątek wyrzucane. Nazwa: NSInternalInconsistencyException Powód: liczba dostarczonych widok kontrolerów (1) nie zgadza się z liczbą wymaganą (2) do żądanej lokalizacji kręgosłupa (UIPageViewControllerSpineLocationMid)

Lokalizacja kręgosłup nie jest „połowy”, ale "min". Jakieś pomysły?

Odpowiedz

4

Prawda, zainicjowałeś UIPageViewController z "Min" jako lokalizacji kręgosłupa. Jednak trzeba zaimplementować delegata do kontrolera widoku i zastąpić metodę GetSpineLocation (! MonoTouch nieba)

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

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

} 

Albo przypisać metodę jego GetSpineLocation nieruchomości:

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

Mimo to, wygląda trochę nieoczekiwanie. Zakładam, że domyślna implementacja natywnej metody pageViewController:spineLocationForInterfaceOrientation: zwraca "Środek", gdy urządzenie obraca się w krajobraz (chociaż nie może znaleźć informacji w dokumentach firmy Apple). W każdym razie, musisz zastąpić powyższą metodę, aby to naprawić.

+0

Może powinienem kupić twoją książkę, mimo że uważam się za doświadczonego programistę MT! :-) – Krumelur

+0

Hehe, książki są zawsze pomocne ...! ;) –

0

Dla bezpieczeństwa sprawdziłem wartości dla UIPageViewControllerSpineLocation i pasują one do wartości Apple documentation.

także Dimitris jest odpowiednia domyślny wewnętrzny, przekazać (gdy nie jest) zwraca UIPageViewControllerSpineLocation.Mid podczas wywołania zwrotnego wprowadzona przez użytkownika nie jest określona (to znaczy kiedy nie jest przypisany UIPageViewController.GetSpineLocation).

To jest autogenerowany kod wiążący, więc trochę trudniej jest nie zwrócić stałej dla wartości domyślnej, nic nie podano, sprawa. Możesz jednak otworzyć raport o błędzie (i podać link do tego pytania), a przyjrzymy się temu.

Powiązane problemy