AppDelegate中的变量作为全局变量不起作用(Variable of AppDelegate

2019-09-16 15:51发布

我想用我的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

感谢任何形式的帮助!

Answer 1:

检查application:didFinishLaunchingWithOptions:正在加入一个名为NSLog(@"...") 如果trackerTEST是零,它可能未正确初始化。



Answer 2:

也许我的回答晚,但,你可以去看看Singleton模式 。

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

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



Answer 3:

@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; 属性只应该够了。



Answer 4:

改变@synthesize testGlobal = _testGlobal;@synthesize testGlobal; 然后再试一次。



文章来源: Variable of AppDelegate used as global variable doesn't work