Objective C - 每个View Controller的全局变量

时间:2014-08-22 07:25:47

标签: ios objective-c xcode viewcontroller

我正在学习Objective C& Xcode,通过我的第一个应用程序。 首先,用户必须登录。然后他可以做几件事,比如加入团队或更改他的数据(用户名,电子邮件......)。

登录完成,工作正常。 问题:

是否可以设置一个我可以从每个View Controller到达的变量?

我尝试使用segues,但我认为在每个View Controller中定义它都非常困难。

我正在寻找一个全局变量,我可以从应用程序的任何地方到达,这可能吗? 或者还有其他方法可以解决这个问题吗?

谢谢你的帮助! 以马内利

4 个答案:

答案 0 :(得分:9)

我个人建议你使用Singleton模式 我不建议把所有内容都放到AppDelegate中,这个类不适用于此。

相反,您可以做的是创建一个专用类(名称类似于" ApplicationState"或适合您的任何类型),并将您需要的属性放在其头文件中,并进行单例管理.m中的代码(以及标题中的原型)

如果您需要单身人士管理代码,请点击此处:

+ (ApplicationState*)sharedInstance
{
    static ApplicationState* sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

然后,如果你在标题中:

@property (nonatomic, strong) NSObject* object;

+ (ApplicationState*)sharedInstance;

您可以通过包含ApplicationState头文件从任何地方获取此变量,并调用:

[[ApplicationState sharedInstance] object];

答案 1 :(得分:1)

如果简单,可以使用NSUserdefault

保存

[[NSUserDefaults standardUserDefaults]setObject:username forKey:@"userName"];
[[NSUserDefaults standardUserDefaults] synchronize];    
 NSLog(@"username saved = %@", username);

<强>读:

NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
NSLog(@"username retrieved = %@", username);

答案 2 :(得分:0)

您也可以使用AppDelegate。

在AppDelegate.h中定义一个属性,

@property (nonatomic, strong) NSString *userName;

然后在视图控制器中,导入AppDelegate.h后,

AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%@", appDel.userName);

答案 3 :(得分:0)

你可以把它们放在plist中,或者你可以创建Objective-C类来初始化变量并导入.pch文件中的标题,然后这个带有数据的类将在每个ViewController中可用