2012-02-17 59 views
0

参考这个SO问题的答案:Keeping track of changes in a UIView 我需要帮助设置NSMutableSet的全局方面。在我appdelegate.h文件我有这样的:创建一个全局NSMutableSet

@interface AppDelegate : NSObject <UIApplicationDelegate> { 
UIWindow *window; 
ViewController *viewController; 
NSMutableSet *statesTouched; 
} 

,这在我的appdelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
statesTouched = [[NSMutableSet alloc]init]; 
[window addSubview:viewController.view]; 
[window makeKeyAndVisible]; 
return YES; 
} 

在我viewcontroller.h文件我加入的对象是这样的:

[statesTouched addObject:touchedStateName]; 

但我得到一个未声明的statesTouched标识符。我从来没有尝试过把这样的东西放到我的应用程序委托中,我对这应该如何工作有点困惑。谢谢!

回答

0

这是因为是您的AppDelegate的实例变量,而不是您的视图控制器。如果将声明和初始化移动到您的视图控制器,错误将会消失。它会不是使它成为一个全球变量,虽然,这是很好的,如果它适合你。

如果它不为你工作,使变量真正的全球性之一:移动宣布了应用程序的委托,并添加extern关键字,像这样:

extern NSMutableSet *statesTouched; 

现在添加定义的.m文件,如下所示:

NSMutableSet *statesTouched; 

确保定义在@implementation块之外。