如何在不传递委托的情况下从RootViewController调用AppDelegate方法?

问题描述:

如何在不传递委托的情况下从RootViewController调用AppDelegate方法?如何在不传递委托的情况下从RootViewController调用AppDelegate方法?

只是想知道是否有办法做到这一点? (或者我是否需要在RootViewController中创建委托对象以保存对AppDelegate的引用)

[[[UIApplication sharedApplication] delegate] someMethod]; 

工作就像一个魅力!

+0

感谢丹尼尔 - 和使用它来调用AppDelegate中的方法(我的情况为saveCoreData方法)没有什么问题?即没有任何关于这是违背最佳做法或任何事情? – Greg 2011-04-21 23:13:50

+0

这种方法的问题在于,如果您正在调用在您的应用程序委托类中定义的自定义方法而未正确投射,则会收到编译器警告。 – 2011-04-21 23:17:45

+2

就我个人而言,我不喜欢这种使用App-Delegate的方式,因为它将您的调用viewController硬连接到特定于应用程序的App-Delegate的实现,从而大大降低了调用viewController对其他项目的可重用性。所以,如果你问我,不这样做,但定义一个适当的协议或使用NSNotification。 – Till 2011-04-21 23:39:22

可以使用

MyDelegate* aDelegate = (MyDelegate *)[[UIApplication sharedApplication] delegate]; 

这发生如此频繁,我总是添加一个方法来MyCustomAppDelegate为我做这个(所以我没有很多从任何控制器访问应用程序代理。在我的代码铸造

@implementation MyCustomAppDelegate() 
- (MyCustomAppDelegate *)appDelegate { 
    return (MyCustomAppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 
@end 
现在

任何地方我可以叫

[MyCustomAppDelgate appDelegate]