爲什麼Passing Data between View Controllers的以下代碼有效? :爲什麼在視圖控制器之間傳遞數據與segue工作
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showDetailSegue"])
{
ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController;
controller.isSomethingEnabled = YES;
}
}
我看到的一切都是他創建了ViewControllerB類的一個實例。我不明白該實例(控制器)如何成爲它傳遞該數據的實際ViewController?我錯過了什麼概念?
哦,我想我明白了。創建該控制器時,我將爲其分配segue.destinationViewController的內存地址,該地址是對傳遞數據的實際ViewController的引用,因此控制器實際上就是該ViewController(因爲它指向的地址與segue相同。 destinationViewController),對嗎? –
執行在故事板中創建的細分時(大概是99%的時間),您根本不會創建_or_分配視圖控制器 - 這是爲您完成的。您只需使用'prepareForSegue:sender:'來配置(「準備」)該視圖控制器。爲了方便起見,可以通過傳入的'segue'(它的'destinationViewController'屬性)來訪問視圖控制器的引用。所以在這個意義上你是對的 - 'segue.destinationViewController'指向與被轉換到的實際視圖控制器相同的內存地址。 – Stuart
ViewControllerB * controller =(ViewControllerB *)segue。destinationViewController;控制器會指向segue.destinationViewController的地址嗎?我問這是因爲我只修改controller.isSomethingEnabled,而不是segue.destinationViewController.isSomethingEnabled –