Как настроить 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 присваивается значение. Вот и все. Если вы хотите, чтобы оно имело какое-то другое значение, вам нужно явно выполнить это назначение, поэтому ваш второй пример работает.

Другие вопросы по тегам