如何在不傳遞委託的情況下從RootViewController調用AppDelegate方法?如何在不傳遞委託的情況下從RootViewController調用AppDelegate方法?
只是想知道是否有辦法做到這一點? (或者我是否需要在RootViewController中創建委託對象以保存對AppDelegate的引用)
如何在不傳遞委託的情況下從RootViewController調用AppDelegate方法?如何在不傳遞委託的情況下從RootViewController調用AppDelegate方法?
只是想知道是否有辦法做到這一點? (或者我是否需要在RootViewController中創建委託對象以保存對AppDelegate的引用)
[[[UIApplication sharedApplication] delegate] someMethod];
工作就像一個魅力!
可以使用
MyDelegate* aDelegate = (MyDelegate *)[[UIApplication sharedApplication] delegate];
這發生如此頻繁,我總是添加一個方法來MyCustomAppDelegate
爲我做這個(所以我沒有很多從任何控制器訪問應用程序代理。在我的代碼鑄造
@implementation MyCustomAppDelegate()
- (MyCustomAppDelegate *)appDelegate {
return (MyCustomAppDelegate *)[[UIApplication sharedApplication] delegate];
}
@end
現在
任何地方我可以叫
[MyCustomAppDelgate appDelegate]
感謝丹尼爾 - 和使用它來調用AppDelegate中的方法(我的情況爲saveCoreData方法)沒有什麼問題?即沒有任何關於這是違背最佳做法或任何事情? – Greg 2011-04-21 23:13:50
這種方法的問題在於,如果您正在調用在您的應用程序委託類中定義的自定義方法而未正確投射,則會收到編譯器警告。 – 2011-04-21 23:17:45
就我個人而言,我不喜歡這種使用App-Delegate的方式,因爲它將您的調用viewController硬連接到特定於應用程序的App-Delegate的實現,從而大大降低了調用viewController對其他項目的可重用性。所以,如果你問我,不這樣做,但定義一個適當的協議或使用NSNotification。 – Till 2011-04-21 23:39:22