2012-04-20 76 views
2

我想用我的AppDelegate来存储任何其他类都可以访问的对象。我宣布这个AppDelegate中是这样的:用作全局变量的AppDelegate变量不起作用

@interface MyAppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    MyClass *tracker; 
} 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) ICViewController *viewController; 
@property (retain, nonatomic) MyClass *tracker; 

@end 

我合成跟踪和应用中:didFinishLaunchingWithOptions:我在像这样的对象设置一个NSString的:

self.tracker = [[MyClass alloc] init]; 
self.tracker.testGlobal = @"global funguje"; 

当我需要到别的地方访问跟踪器在其他一些类中,我使用此代码:

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];  
MyClass *trackerTEST = appDelegate.tracker; 
NSLog(@"TEST : %@",trackerTEST.testGlobal); 

问题是testGlobal为NULL。我究竟做错了什么?此处还有MyClass的课程文件:

@interface MyClass : NSObject 
{ 
    NSString *testGlobal; 
} 
@property (retain, nonatomic) NSString *testGlobal; 
@end 

@implementation MyClass 
@synthesize testGlobal = _testGlobal; 
@end 

感谢您的任何帮助!

+0

你说'testGlobal'是零,但你肯定'trackerTEST'和'appDelegate'是不是也为零? – jtbandes 2012-04-20 09:39:08

+0

刚刚发现appDelegate很好,但trackerTEST是零...嗯...我在这里做错了什么? :) – 2012-04-20 09:45:53

回答

2

检查是否通过添加NSLog(@"...")来调用application:didFinishLaunchingWithOptions:。如果trackerTEST为零,则可能未正确初始化。

+1

谢谢!我终于明白了,谢谢你...这真的很愚蠢的错误:)我在应用程序结束时初始化跟踪器:didFinishLaunchingWithOptions:,这是我使用后... grrr :)谢谢,真的:) – 2012-04-20 10:15:05

+0

你受欢迎的。我建议将初始化重定位到你的'init'方法。但我不太熟练,不能确定这是不是一个体面的解决方案。 :D – DocJones 2012-04-20 10:17:09

0
@interface MyAppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    MyClass *tracker; 
} 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) ICViewController *viewController; 
@property (retain, nonatomic) MyClass *tracker; 

@end 

为什么你有@property跟踪器和var跟踪器?

尝试删除MyClass *tracker;属性只应该足够。

+0

以及我很绝望,所以我试图把它添加到那里:)但删除它没有帮助,它仍然无......:/ – 2012-04-20 09:56:59

0

@synthesize testGlobal = _testGlobal;更改为@synthesize testGlobal;并重试。

+0

没有帮助既不... ...//问题是,该对象我从appdelegate得到的是零... – 2012-04-20 10:09:21

4

也许我回答迟了,但是,你可以看看Singleton Pattern

在软件工程中,单例模式是一种设计模式,用于通过将类的实例化限制为一个对象来实现单例的数学概念。当需要确切的一个对象来协调整个系统的操作时,这非常有用。这个概念有时候被推广到当只有一个对象存在时更有效地操作的系统,或者将实例化限制到一定数量的对象。

这里是一个ObjC实现:http://getsetgames.com/2009/08/30/the-objective-c-singleton/

+0

defiitely不迟...这是一个很好的答案;)但后来我决定宁愿使用这种方法...在这种情况下,单身人士对我来说太复杂了...但是无论如何, – 2012-04-20 10:22:33