引用 AppDelegate 实例变量
Posted
技术标签:
【中文标题】引用 AppDelegate 实例变量【英文标题】:Referencing AppDelegate instance variables 【发布时间】:2008-10-23 23:27:36 【问题描述】:我有一个基于基于导航的应用程序模板的项目。
AppDelegate 中有方法-applicationDidFinishLoading:
和-applicationWillTerminate:
。在这些方法中,我正在加载和保存应用程序数据,并将其存储在一个实例变量中(它实际上是一个对象图)。
当应用程序加载时,它会加载 MainWindow.xib,它有一个 NavigationConroller,而后者又具有一个 RootViewController。 RootViewController nibName
属性指向 RootView(我的实际控制器类)。
在我的类中,我希望引用我在-applicationDidFinishLoading:
方法中创建的对象,以便获得对它的引用。
谁能告诉我该怎么做?我知道如何在我以编程方式创建的对象之间进行引用,但我似乎无法想办法返回,因为中间步骤是在 NIB 文件中完成的。
【问题讨论】:
【参考方案1】:对于我需要在应用程序的任何位置访问它的变量(通常是模型数据结构),请在您的 AppDelegate 类中声明它们。当你需要引用它时:
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
//and then access the variable by appDelegate.variable
【讨论】:
我投了这个票,因为您添加了演员表,您需要将 AppDelegate 转换为您自己的类型,以便您可以看到自己设置的属性。您可以通过不强制转换为“AppDelegate”来编辑以使这一点更清楚...... 有没有办法访问根视图控制器而不参考应用程序委托名称或其任何成员? (我想写一些需要根视图控制器的可移植代码。) SK9,每个ios应用都必须有一个appDelegate,所以代码可以移植!【参考方案2】:如果我理解您的问题,您想在 AppDelegate 对象中引用成员变量/属性吗?最简单的方法是使用 [[UIApplication sharedApplication] delegate] 返回对您的对象的引用。
如果你有一个名为 window 的属性,你可以这样做:
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
//do something with mainWindow
【讨论】:
【参考方案3】:这是一个定义明确的适用于 iOS4.0 及更高版本的便携式替代方案:
UIApplication *myApplication = [UIApplication sharedApplication];
UIWindow *mainWindow = [myApplication keyWindow];
UIViewController *rootViewController = [mainWindow rootViewController];
或者,在一行中,
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
不要忘记设置窗口的rootViewController
属性(比如在 IB 中),否则会这样。
【讨论】:
【参考方案4】:定义一个宏并在任何地方使用它!
#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)
在我的代码中:-
UIViewController *rootViewController = appDelegateShared.window.rootViewController;
【讨论】:
以上是关于引用 AppDelegate 实例变量的主要内容,如果未能解决你的问题,请参考以下文章
引用在 AppDelegate 中创建的 NSPersistentStore 实例