Как настроить rootViewController, чтобы он указывал на адрес указателя
Резюме: rootViewController установлен на указатель. Я изменяю указатель и rootViewController не меняется.
Я установил в свой rootViewController указатель на контроллер представления, называемый currentViewController.
измените currentViewController, чтобы он указывал на другой UIViewController - и iPhone/iPad не обновляет свой экран. Зачем?
Примечание: следующее не работает - показывает контроллер представления с индексом =0:
_currentViewController = [self.viewControllers objectAtIndex:0];
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController;
_currentViewController = [self.viewControllers objectAtIndex:1];
примечание стороны работает, потому что это показывает view controller в индексе 1, но не имеет смысла для меня (я уже говорил rootViewController в первый раз, где это должно указывать):
_currentViewController = [self.viewControllers objectAtIndex:0];
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController;
_currentViewController = [self.viewControllers objectAtIndex:1];
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController;
1 ответ
Вы неправильно понимаете, как работают указатели и назначения. Когда вы пишете:
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController;
... что происходит, что rootViewController
теперь содержит значение, которое является адресом некоторого объекта в памяти. Менять что currentViewController
указывает на (то есть изменение его значения) не влияет на rootViewController
, Он по-прежнему указывает на то, на что вы указали (т.е. его значение не меняется).
Вы рассматриваете назначение как rootViewController
становится псевдонимом для _currentViewController
, Это не то, что происходит. Что происходит то rootViewController
присваивается значение. Вот и все. Если вы хотите, чтобы оно имело какое-то другое значение, вам нужно явно выполнить это назначение, поэтому ваш второй пример работает.