2010-11-25 35 views
13

我不知道什麼時候或者我爲什麼要使用[[UIApplication sharedApplication] delegate]當使用[UIApplication的sharedApplication]委託]

我使用代理時[self.navigationController pushViewController:myView Animation:YES]簡化版,導航。我製作了MyView *delegate = [[UIApplication sharedApplication] delegate][delegate pushViewController:myView Animation:YES]以使導航正常工作。

我不知道解決方案是否正確,另外我不知道[[UIApplication sharedApplication] delegate]的用途或對應用程序有什麼影響。

有人可以幫助我嗎?

謝謝!

+0

檢查Interface Builder中UIApplication的委託出口。它看起來像是連接到一個導航控制器,這似乎不是好的。 – Costique 2010-11-25 13:13:18

回答

22

[[UIApplication sharedApplication] delegate]會給你一個指向你的應用程序委託。當您創建項目時自動創建的那個。通常它被命名爲YourAppNameAppDelegate

有兩件事情與你的代碼有點不對。

  1. 在聲明MyView *delegate

    這應該不包括id delegateYourAppNameAppDelegate *delegate

  2. 您不應該通過應用程序委託來訪問您的navigationController。我會研究爲什麼self.navigationController失敗,並解決這個問題。當您依賴應用程序委託時,您基本上實現了單例模式。因爲單身模式是最不酷的編程設計模式,當與其他程序員交談時,它不會贏得任何積分。

+0

非常感謝您的回覆!但我不明白什麼時候需要使用指向應用程序委託的指針。你會看到self.navigationController地址在哪裏? – rasputin 2010-11-26 00:14:34

5
self.appDelegate = [[UIApplication sharedApplication] delegate]; 

當你創建一個在你的ivars叫的appDelegate變量,它不會一下就自動的設置爲應用程序的委託 - 你必須自己設置。從您的應用程序的任何地方,您都可以通過應用程序單例訪問代理。

[UIApplication sharedApplication] < ---給出了訪問單

委託方法返回一個指向應用程序委託。

因此,由於您的變量需要初始化,因此有兩個邏輯位置可以做到這一點 - 一個位於初始化程序中,如果您創建一個或在接近視圖開始時調用的方法中,它的控制器和那個地方在viewDidLoad中。

相關問題