iPhone viewWillAppear, не стреляя

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

114
задан ROMANIA_engineer 22 September 2017 в 10:10
поделиться

8 ответов

Если Вы используете контроллер навигации и устанавливаете его делегата, то представление {Сделал} {Появляются, Исчезнет}, методы не вызываются.

необходимо использовать методы делегата контроллера навигации вместо этого:

navigationController:willShowViewController:animated:
navigationController:didShowViewController:animated:
54
ответ дан mmalc 24 November 2019 в 02:36
поделиться

Я не на 100% уверен в этом, но я думаю, что добавление представления к иерархии представления непосредственно означает звонить -addSubview: на представлении контроллера представления (например, [viewController.view addSubview:anotherViewController.view]) вместо того, чтобы продвинуть новый контроллер представления на стопку контроллера навигации.

1
ответ дан Martin Gordon 24 November 2019 в 02:36
поделиться

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

[self.navigationController pushViewController:<view> animated:<BOOL>];

, Когда я делаю это, я действительно заставляю эти viewWillAppear функция стрелять. Я предполагаю, что это квалифицирует как "косвенное", потому что я не называю фактическое addSubView метод сам. Я не знаю, на ли это 100% применимо к Вашему приложению, так как я не могу сказать, используете ли Вы контроллер навигации, но возможно оно даст представление.

5
ответ дан Ashish Kakkad 24 November 2019 в 02:36
поделиться

Я столкнулся с этой той же проблемой. Просто отправьте viewWillAppear сообщение к Вашему контроллеру представления перед добавлением его как подпредставления. (Существует один параметр BOOL, который говорит контроллер представления, если это анимируется для появления или нет.)

[myViewController viewWillAppear:NO];

Взгляд на RootViewController.m в примере Метронома.

(я на самом деле нашел проекты Apple в качестве примера замечательными. Существует НАМНОГО больше, чем HelloWorld;)

29
ответ дан Ashish Kakkad 24 November 2019 в 02:36
поделиться

iOS 13 битов мое приложение в торце здесь. Если Вы заметили, что изменение поведения с iOS 13 просто установило следующее перед продвижением его:

yourVC.modalPresentationStyle = UIModalPresentationFullScreen;

Вы, возможно, также должны установить его в своем .storyboard в инспекторе Атрибутов (Презентация набора на Полный экран).

Это заставит Ваше приложение вести себя, как оно сделало в предыдущих версиях iOS.

1
ответ дан 24 November 2019 в 02:36
поделиться

Я думаю, что добавление подпредставления не обязательно означает, что представление появится, поэтому нет автоматического вызова метода класса, который он будет

1
ответ дан 24 November 2019 в 02:36
поделиться
unsafe
{
    char c = 'c';
    char *ch = &c;
}

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

В этом случае:

char c = 'c';
string s = c.ToString(); // or...
string s1 = "" +c;

Также доступно:

unsafe
{
    char c = 'c';
    char* ch = &c;
    string s1 = new string(ch);
    string s2 = new string(c, 0);
}
-121--4534683-

Как насчет:

var test = 'c'.ToString()
-121--4534692-

У меня была та же проблема. В моем приложении у меня есть 2 навигационных контроллера и толкание одного и того же контроллера вида в каждом из них работали в одном случае, а не в другом. Я имею в виду, что при нажатии точно такого же контроллера вида в первом UINavigationController вызывался viewWillAppean , но не при нажатии во втором навигационном контроллере.

Затем я наткнулся на этот пост UINavigationController должен вызвать методы viewWillAppean/viewWillDispear

И понял, что мой второй навигационный контроллер действительно переопределил viewWillAppean . Проверка кода показала, что я не звонил

[super viewWillAppear:animated];

Я добавил его и это сработало!

В документации говорится:

Если переопределить этот метод, необходимо вызвать super в какой-то момент реализации.

8
ответ дан 24 November 2019 в 02:36
поделиться

Я думаю, что они имеют в виду "напрямую", подключая все так же, как это делает шаблон xcode "Navigation Application", который устанавливает UINavigationController как единственное вложенное представление UIWindow приложения.

Использование этого шаблона - единственный способ заставить методы Will/Did/Appear/Disappear вызываться на объектных ViewControllers при нажатии/открытии этих контроллеров в UINavigationController. Ни одно из других решений в ответах здесь не помогло мне, включая реализацию их в RootController и передачу их в (дочерний) NavigationController. Эти функции (will/did/appear/disappear) вызывались в моем RootController только при показе/скрытии VC верхнего уровня, моих "login" и navigationVC, а не подVC в навигационном контроллере, поэтому у меня не было возможности "передать их через" Nav VC.

В итоге я использовал функцию делегата UINavigationController для поиска конкретных переходов, которые требовали последующей функциональности в моем приложении, и это работает, но требует немного больше работы для того, чтобы "смоделировать" функциональность исчезновения и появления.

Также принципиально важно заставить его работать после того, как я бился головой об эту проблему в течение нескольких часов сегодня. Любые рабочие фрагменты кода с использованием пользовательского RootController и дочернего навигационного VC были бы очень признательны.

1
ответ дан 24 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: