1

摘要:rootViewController 被设置为一个指针。我改变了指针,rootViewController 没有改变。

我将 rootViewController 设置为指向名为“currentViewController”的视图控制器的指针。

将“currentViewController”更改为指向不同的 UIViewController - iPhone/iPad 不会更新其屏幕。为什么?

旁注以下内容不起作用 - 它在 index=0 处显示视图控制器:

_currentViewController = [self.viewControllers objectAtIndex:0];
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController; 
_currentViewController = [self.viewControllers objectAtIndex:1];

旁注以下确实有效,因为它在索引 1 处显示视图控制器,但对我来说没有意义(我已经在第一次告诉 rootViewController 它应该指向的位置):

_currentViewController = [self.viewControllers objectAtIndex:0];
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController; 
_currentViewController = [self.viewControllers objectAtIndex:1];
[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController; 
4

1 回答 1

2

您误解了指针和分配的工作原理。当你写:

[[[UIApplication sharedApplication] delegate] window].rootViewController = _currentViewController;

...发生的情况是,它rootViewController现在拥有一个值,该值是内存中某个对象的地址。更改currentViewController指向的内容(即更改其值)对rootViewController. 它仍然指向你告诉它指向的任何东西(即它的值不会改变)。

您将分配rootViewController视为_currentViewController. 这不是发生的事情。发生的事情是rootViewController被分配了一个值。而已。如果您希望它具有其他值,那么您需要显式执行该分配,这就是您的第二个示例有效的原因。

于 2014-08-29T20:14:17.360 回答