我希望能够从任何更改全局变量值的类中调用方法。
我将首先为不想查看代码的任何人概述问题。
提前为长篇道歉!我只想提供所有详细信息。
在我当前的设置(受 SREE 博客启发的一些测试代码)中,我有一个单例类 (GlobalData),它定义了一个全局变量 (globalMessage) 和一个更改全局变量的方法 (globalFunction)。
到目前为止,我的代码...
1) 在单例类 (GlobalData) 中将 globalMessage 设置为“默认全局消息”。
2) 使用 NSLog 在另一个类 (MyDocuments) 中打印“Outside class: 'Default Global Message'”。
3) 使用另一个类 (MyDocuments) 来调用 globalFunction。
4) globalFunction 将 globalMessage 设置为“New Global Message”
5) globalFunction 使用NSLog(@"Set %@", globalMessage)
输出“设置新的全局消息”
6) 重复步骤 2。NSLog(@"Outside class: %@", [GlobalData sharedGlobalData].globalMessage)
不知何故,当我调用 globalFunction 时,我只是在更改实例变量 globalMessage 而不是全局变量。
非常感谢您的帮助!
这是代码...
全球数据.h
#import <Cocoa/Cocoa.h>
@interface GlobalData : NSObject {
NSString *globalMessage;
}
@property (retain) NSString *globalMessage;
+ (GlobalData*)sharedGlobalData;
+(void)globalFunction;
@end
全球数据.m
#import "GlobalData.h"
@implementation GlobalData
@synthesize globalMessage;
static GlobalData *sharedGlobalData=nil;
+(GlobalData*)sharedGlobalData{
if (sharedGlobalData==nil) {
sharedGlobalData = [[super allocWithZone:NULL]init];
}
sharedGlobalData.globalMessage=@"Default Global Message";
return sharedGlobalData;
}
+(void)globalFunction{
sharedGlobalData.globalMessage=@"New Global Message";
NSLog(@"Set %@",sharedGlobalData.globalMessage);
}
@end
我的文档.h
#import <Cocoa/Cocoa.h>
#import "GlobalData.h"
@interface MyDocument : NSPersistentDocument {
}
@end
我的文档.m
#import "MyDocument.h"
@implementation MyDocument
- (id)init
{
self = [super init];
NSLog(@"Outside class: '%@'",
[GlobalData sharedGlobalData].globalMessage);
NSLog(@"Outside class setting new message...");
[GlobalData globalFunction];
NSLog(@"Outside class: '%@'",
[GlobalData sharedGlobalData].globalMessage);
return self;
}
- (NSString *)windowNibName
{
return @"MyDocument";
}
@end