繁体   English   中英

目标C-每个View Controller的全局变量

[英]Objective C - Global variables for every View Controller

我通过编写第一个应用程序来学习Objective C和Xcode。 首先,用户必须登录。然后,他可以执行多项操作,例如加入群组或更改其数据(用户名,电子邮件等)。

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

是否可以设置我可以从每个View Controller访问的变量?

我尝试过使用segues,但是我认为很难在每个View Controller中定义它。

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

感谢您的帮助! 伊曼纽尔

我个人建议您使用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];

如果它很简单,则可以使用NSUserdefault

救:

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

读:

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

您也可以使用AppDelegate。

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

@property (nonatomic, strong) NSString *userName;

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

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

您可以将它们放在plist中,也可以创建Objective-C类在其中初始化变量并在.pch文件中导入标头,然后该类的数据将在每个ViewController中可用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM