Nano Hash - криптовалюты, майнинг, программирование

Как установить первую страницу в UIPageViewController

Когда пользователь находится на первой странице UIPageViewController и пытается вернуться назад, я просто возвращаю nil. В iOS 5 это работает нормально. Это вызывает сбой в iOS 6.

*** 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'

Вот мой код. При возврате contentViewController вместо nil работает нормально. Что поставить вместо 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;

}

  • Можете ли вы просто вернуть self вместо nil? Это предположение с моей стороны. 09.10.2012
  • @JoshuaSmith Я пробовал, но у меня все та же проблема. Спасибо хоть. 10.10.2012
  • Возврат nil — это именно то, как шаблон проекта Apple «Приложение на основе страниц» обрабатывает первую и последнюю страницы. Я думаю, у тебя другая проблема. Установите точку останова исключения и опубликуйте полную дорожку стека исключения. 10.10.2012

Ответы:


1

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

Для меня это сработало, чтобы не делать это переназначение для iOS 6. Это нормально, так как iOS обрабатывает касания немного по-другому. Кнопки или ваши собственные распознаватели жестов на странице будут нормально работать в iOS 6, поскольку они имеют приоритет и автоматически отменят пейджинг.

Надеюсь, это поможет.

13.10.2012
  • Я попробую это позже. Вы сказали, что кнопки и мои собственные распознаватели жестов будут иметь приоритет в iOS 6... это тоже изменение по сравнению с iOS 5? Спасибо. 13.10.2012
  • @Jack: да, я думаю, что это изменение (и причина, по которой я думаю, что старый подход больше не нужен в большинстве случаев) 16.10.2012
  • Аррр, это сводило меня с ума!! Не ищите решения, товарищи! 22.06.2013

  • 2

    Последняя версия шаблона приложения на основе страницы Xcode содержит следующий код:

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

    Это должно делать свое дело :-)

    08.10.2012
  • Спасибо, но это не сработало. Возврат nil вызывает проблему. Когда я возвращаю значение, отличное от nil, все работает нормально. Как мне остановить переход на страницу перед первой страницей, если nil не работает? 08.10.2012

  • 3

    Вам нужно добавить следующее в ваш код

    if (currentIndex == 0 || (index == NSNotFound)) {
    
        //if on the first page, can't go back
        return nil;
    
     }
    
    08.10.2012
  • Извините, это не сработало. Он все еще падает. Возврат nil является проблемой. Не нравится почему-то. Оператор if менять не нужно. 08.10.2012
  • Можете ли вы поставить точку останова на nil и проверить, входит ли она вообще в этот блок? 08.10.2012
  • Это так, я использовал NSLog ранее, и он вывел свое содержимое. Опять же, все это отлично работало в iOS 5. Проблемы возникают именно в iOS 6. 09.10.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..