2014-08-29 63 views
1

摘要: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]; 

侧面说明下面做工作,因为它显示在索引1的视图 - 控制,但没有任何意义(我已经告诉rootViewController第一次它应该指向哪里):

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

回答

2

你误解了指针和赋值如何工作。当你写:

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

...什么情况是,现在rootViewController持有值是内存中的一些对象的地址。改变currentViewController指向(即改变其值)对rootViewController没有影响。它仍然指向你指示的任何东西(即其值不会改变)。

您正在对待作业,好像rootViewController成为_currentViewController的别名。这不是发生了什么。会发生什么是给rootViewController分配了一个值。而已。如果你想让它具有其他价值,那么你需要明确地执行这个任务,这就是你的第二个例子工作的原因。

+0

感谢您的回复。无论如何,使委托]窗口] .rootViewController ='设置'设置rootViewController指向_currentViewController的地址(而不是复制_currentViewController的值)? – user1709076 2014-08-29 22:09:53

+0

你不会复制任何东西的值......正如lwburk上面所说的,一个指针只保存一个内存地址。这是一个参考类型。任何数量的指针都可能指向相同的内存地址。这与你的实际地址有点类似:如果你在一张纸上写下你的地址,那不是你的房子......它只是“指向”你的房子,以便我可以找到它:) – 2014-08-29 23:08:15

+0

虽然我应该说..在计算机术语中,内存地址就是被指向的东西,而指针就像现实生活中的“地址”。这可能令人难以置信的混乱。 – 2014-08-29 23:14:48