NSInternalInconsistencyException от UIPageViewController при вращении

У меня Monotouch 5.2.6 и iOS SDK 5.0.1.

У меня есть UIPageViewController, который является дочерним контейнером другого контроллера представления. Он создается так:

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

Если я поворачиваю устройство (симулятор), я получаю это исключение в UIApplication.SendEvent():

Возникло исключение Objective-C. Имя: NSInternalInconsistencyException Причина: количество предоставленных контроллеров представления (1) не соответствует количеству, необходимому (2) для запрошенного местоположения корешка (UIPageViewControllerSpineLocationMid)

Расположение позвоночника НЕ ​​«среднее», а «минимальное». Любые идеи?


person Krumelur    schedule 16.03.2012    source источник


Ответы (2)


Правда, вы инициализировали UIPageViewController с «Мин.» в качестве местоположения корешка. Однако вам нужно реализовать делегат для вашего контроллера страницы и переопределить метод GetSpineLocation:

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

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

}

Или назначьте метод его свойству GetSpineLocation (рай MonoTouch!):

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

Тем не менее, это выглядит немного неожиданным поведением. Я предполагаю, что реализация по умолчанию собственного метода pageViewController:spineLocationForInterfaceOrientation: возвращает «Mid», когда устройство поворачивается в альбомную ориентацию (хотя не удалось найти информацию в документах Apple). В любом случае, вы должны переопределить вышеуказанный метод, чтобы все было правильно.

person Dimitris Tavlikos    schedule 16.03.2012
comment
Может быть, мне стоит купить вашу книгу, хотя я считаю себя опытным разработчиком машинного перевода! :-) - person Krumelur; 16.03.2012
comment
Хе-хе, книги всегда пригодятся...! ;) - person Dimitris Tavlikos; 16.03.2012

Чтобы быть в безопасности, я проверил значения для UIPageViewControllerSpineLocation, и они соответствуют значениям Apple документация.

Также Димитрис прав, внутренний делегат по умолчанию (если он не указан) возвращает UIPageViewControllerSpineLocation.Mid, когда обратный вызов, предоставленный пользователем, не указан (т. е. когда UIPageViewController.GetSpineLocation не назначен).

Это автоматически сгенерированный код привязки, поэтому немного сложно не вернуть константу для случая по умолчанию, ничего не предоставленного. Однако не стесняйтесь открыть отчет об ошибке (и ссылку на этот вопрос), и мы его рассмотрим.

person poupou    schedule 16.03.2012