我在global.h文件中定义了一个全局变量标志,当我点击下一个标签栏然后我无法访问标志值。我想要一个全局变量用于所有tabs.please建议我。
答案 0 :(得分:5)
如果您想要一个全局变量,可以尝试以下选项:
1)在global.h中定义静态变量。例如。如果你想拥有一个NSString全局变量,请在global.h中声明以下内容:
@interface global : NSObject {
}
+(NSString*)MY_STR;
@end
然后在global.m中将其实现为static:
static NSString* MY_STR;
@implementation global
+(void) initialize
{
MY_STR = @"global string";
}
+(NSString*)MY_STR{
return MY_STR;
}
然后在任何需要此变量的类中,您可以导入global.h并按如下方式访问它:
[global MY_STR];
2)在这种方法中,定义单例类并使用其属性。 您可以将全局创建为单例类。在global.h中声明一个静态getInstance方法:
@interface global : NSObject{
NSString *MY_STR;
}
@property(nonatomic, retain) NSString *MY_STR;
+(global*)getInstance;
@end
在global.m中,声明一个静态sharedInstance:
@implementation global
@synthesize MY_STR;
static global *g;
+(global*)getInstance{
@synchronized([global class]){
if(g == nil){
g = [[global alloc] init];
}
}
return g;
}
@end
在任何需要访问MY_STR的类中,导入global.h并编写以下内容:
global *g1= [global getInstance];
g1.MY_STR;
3)第三种方法是在app delegate中声明变量并访问它们。
答案 1 :(得分:2)
用于(非客观)c方法:
在global.h中
extern int flag;
在global.m
中int flat;
在任何其他.m或.c
中#import "global.h"
flag = 123; // set
int abc = flag; // get
答案 2 :(得分:0)
您是否已将此文件包含在要使用此标志的位置?
答案 3 :(得分:0)
为每个标签的点击事件使用Getter和Setter方法。
-(void)setTitle:(NSString *)newTitle {
if (instanceVar != newTitle) {
[instanceVar release];
instanceVar = [newTitle copy];
// or retain, depending on object & usage
}
}
-(NSString *)title {
return [[instanceVar retain] autorelease];
}