2013-02-28 45 views
0

我的問題更多的是「是的」,而不是「如何做到這一點」。 我有一個簡單的應用程序,基於navigationViewController。我有一個viewControllerA推着另一個viewControllerB到堆棧中。我做了什麼 - 在viewControllerB我有一個類型爲viewControllerA的指針,所以當我將它推入堆棧時,我是這樣說的:在iOS中,指針可以在視圖之間傳遞數據嗎?

-(void)buttonPressed{ 
    ViewControllerB * nextView = [ViewControllerB alloc] init]; 
    nextView.lastView = self; 
    [self.navigationViewController pushViewController:nextView animated:YES]; 
} 

那麼,在新的viewControler我在第一viewControler提供一個值的字段:

lastView.dataString = @"ABC"; 

所以viewControllerA關閉時我已經在viewControllerA改變字段的值。

我的問題是:可以嗎?你能告訴我爲什麼這不是一個好主意嗎? 我正在使用NSString值。

謝謝你們:)

回答

0

從技術上講,這是行的,它會工作。如上所述,確保只保留對前一個視圖控制器的弱引用,否則會導致保留週期。

然而,這在重用性和功能隔離方面並不十分乾淨。

其他三個方法可以使用:

  • 代表團
  • 鍵 - 值觀察
  • NSNotifications
+0

感謝,就是採用這種可行的理由爲蘋果男孩把我的應用程序從商店關閉? – 2013-02-28 22:39:46

+0

@AlexBrest除非您有上述保留週期(又名強參考週期),否則會導致泄漏並最終導致崩潰。爲了安全起見,使這是弱指針。但是Apple沒有審查你的代碼,所以他們不知道你決定將這個指針調回給呈現視圖'lastView'而不是'delegate',並聲明它是控制器的指針,而不是使用協議。他們正在審查您的應用程序的操作,而不是代碼。 – Rob 2013-03-01 00:16:13

+0

我明白了。非常感謝! – 2013-03-01 22:19:22

0

確保ViewControllerB不保留它的lastview財產,否則這將是一個保留週期和兩個視圖控制器將永遠不會被釋放。將信息從子視圖控制器傳遞給父項的正確方法是使用協議。有很多類似的問題,例如見https://stackoverflow.com/a/9736559/568529

相關問題