2011-11-26 99 views
1

可能重复:
How to use global variables in Objective-C?在Objective-C全局字符串变量

在我Login.m文件,我有

NSString *userName = txtUsername.text; // this is getting the text from the username text field and storing it in userName 

的问题是,我需要访问来自不同类的变量userName,所以我需要将其声明为全局变量。这样做的最好方法是什么?

+0

这个问题从[XY问题]遭受(http://meta.stackexchange.com/questions/ 66377 /)。至于它描述的解决方案,[globals are bad](http://c2.com/cgi/wiki?GlobalVariablesAreBad)。作为替代方法,请参阅[Objective-C:在一个线程中进行分配并在其他版本中进行分配](http://stackoverflow.com/q/4698273/90527),以获取带访问器的类变量的示例实现。 – outis

回答

1

一种选择是使其成为应用程序委托中的实例变量。应用程序委托可以很容易地从其他类实例中访问。由于全局变量不是一个好的设计,这有点更好。

0

我会做的是忘记变量,但在这些其他类中引用txtUsername.txt,否则你正在制作一个你试图保持更新的文本的副本,希望你没有错过任何东西。

所以在你的.h文件中,你把

{ 

UITextField *txtUsername; 

} 

,我假设你已经有了。

然后:

@property (nonatomic, retain) UITextField *txtUsername; 

,然后在.m文件,在上面放,在@implementation线下:

@synthesize txtUsername; 

然后在.m文件要引用它在,去它的.h文件,并把:

#import "Login.h" 

顶部,与其他进口线。然后输入:

{ 

Login *login; 

} 

这会创建一个名为login的变量。如果你使用的是xib,那么你可以将它连接到你的xib,或者如果你没有使用代码初始化它。然后,当你想要的文字,你简单地说:

login.txtUsername.text; 
+0

嗨,我这样做,但我得到一个错误信息 - 使用未声明的标识符'登录' –

0

考虑一个singleton类将持有你的全局变量。

要声明一个单独的类,看看下面的例子和,或见here

+(Constants *) instance { 
    @synchronized(self) { 
     if (gInstance == NULL) { 
      gInstance = [[self alloc] init]; 
     } 
    } 

    return gInstance; 
} 


-(id) init { 

    if (gInstance != NULL) { 
     return gInstance; 
    } 

    self = [super init]; 

    if (self) { 
     // do something clever 
    } 
    gInstance = self; 
    return gInstance; 
}