2012-02-17 89 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塊之外。