2014-08-29 28 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