在Objective C中创建全局变量

时间:2013-10-19 06:39:03

标签: ios sqlite

我设计了一个登录应用。我在sqlite数据库中输入了帐户数据。但是,当我使用帐户用户名和密码登录时,我希望所有视图控制器都可以访问这些用户名和密码。因为,我有不同的控制器,将更新帐户的详细信息。需要实施细节.. 感谢

5 个答案:

答案 0 :(得分:2)

使用单身人士:http://www.galloway.me.uk/tutorials/singleton-classes/

我有一个类似这样的项目(注意我使用的是iOS钥匙串而不是数据库,但我在这里隐藏了这些细节):

@interface User : NSObject
@property (nonatomic, strong) NSString *username;

+ (User *)currentUser;

@end

@implementation User

+ (User *)currentUser
{
    static User *currentUser = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        currentUser = [[User alloc] initFromKeychain];
    });
    return currentUser;
}
@end

有许多方法可以做单身人士(取决于你想要了解某人是否可以创建你的班级的非单身实例)。例如:What should my Objective-C singleton look like?

您也可以直接在任何需要的地方访问钥匙串。您还应该问问自己为什么这么多代码需要访问用户名/密码。听起来像一个破碎的设计。

答案 1 :(得分:1)

避免全球化  变量,而不是您可以使用Singleton类来存储应用程序范围的凭据信息。

但请记住,在应用中存储凭据的最佳方式是使用Apple Keychain,您可以在Apple网站上找到API参考。

答案 2 :(得分:1)

正如所说 - 避免全局变量,但如果你想要它们肯定 - 就像用c语言一样:

在一个文件中定义此变量

在所有其他文件中使用extern关键字

引用它

答案 3 :(得分:1)

简单地说:不要这样做!

我建议将凭据存储在钥匙串中。但是不要使用Apple提供的示例代码。它不起作用。我在我的项目中使用SSKeychain

如果您不需要存储凭据,则应该像aleroot建议的那样使用单例或只有一个实例的类。

答案 4 :(得分:0)

三个答案:

  • 不要这样做。
  • 如果必须这样做,请使用单身人士。
  • 为了非常方便地访问用户名和非机密(即密码)变量,请使用NSUserDefaults。