我想使用我的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 :(得分:4)
也许我迟到了,你可以看一下Singleton Pattern。
在软件工程中,单例模式是一种设计模式,用于通过将类的实例化限制为一个对象来实现单例的数学概念。当需要一个对象来协调整个系统的操作时,这非常有用。这个概念有时会推广到只有一个对象存在时运行效率更高的系统,或者将实例化限制为一定数量的对象。
这是一个ObjC实现:http://getsetgames.com/2009/08/30/the-objective-c-singleton/
答案 1 :(得分:2)
通过添加application:didFinishLaunchingWithOptions:
来检查是否正在调用NSLog(@"...")
。如果trackerTEST
为零,则可能未正确初始化。
答案 2 :(得分:0)
@interface MyAppDelegate : UIResponder <UIApplicationDelegate>
{
MyClass *tracker;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ICViewController *viewController;
@property (retain, nonatomic) MyClass *tracker;
@end
为什么你有@property tracker和var tracker?
尝试删除MyClass *tracker;
属性应该足够了。
答案 3 :(得分:0)
将@synthesize testGlobal = _testGlobal;
更改为@synthesize testGlobal;
,然后重试。