2

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

感谢您提供任何帮助!

4

4 回答 4

4

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

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

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

于 2012-04-20T10:20:43.763 回答
2

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

于 2012-04-20T10:10:43.930 回答
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;仅删除属性就足够了。

于 2012-04-20T09:52:24.353 回答
0

更改并重@synthesize testGlobal = _testGlobal;@synthesize testGlobal;

于 2012-04-20T10:04:07.300 回答