3

我正在使用我的应用程序委托的变量/属性作为全局变量。(我不想处理单例类。)

我正在尝试在我的 Application Delegate 类中编写 #define 语句。如果我输入:

  [UIApplication sharedApplication]

在我的应用委托类中,代码提示无法识别 sharedApplication。但是,如果我在 viewController 类中键入相同的内容,“sharedApplication”会立即弹出。

为了在我的 applicationDelegate.h(或 .m?)中定义一个 NSMutableDictionary,我写:

#define MyDictionary [[[UIApplication sharedApplication] delegate] stateDictionary]

然后,如果我尝试在另一个类中使用它:

[[MyDictionary objectForKey:@"California"] largestCity];

我收到一个错误,必须首先声明 MyDictionary。我真的对这里的很多概念感到困惑。

4

2 回答 2

8

我很确定有人会更好地回答这个问题,但这里有一个快速的:

假设您的应用程序名为 myApplication。将“全局”属性分配给 MyApplicationDelegate,然后可以从任何地方访问它,如下所示:

// get reference to app delegate
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]

Property *myProperty = appDelegate.property;

此外,请确保您在标题中链接到 MyApplicationDelegate 文件:

#import "MyApplicationDelegate.h"

总体而言,使用“全局”对象是否是好的设计还有更长的争论,但我现在不会讨论这个问题。

于 2009-08-27T20:17:50.170 回答
2

我总是添加一个类别,UIApplication例如:

@interface UIApplication (MyAppDelegate)
+(MyAppDelegate*)sharedMyAppDelegate;
@end

这样我就不必担心类型转换了。MyAppDelegate我经常在与类本身相同的文件中定义和实现这个类别。所以这是我#import所有的标题。您可以将其添加到您的文件中。MyProject_Prefix.chp

如果您的架构分层正确(是的,它是完全可测试的) ,单身人士也不错。

于 2009-08-28T21:15:24.140 回答