0

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

4

5 回答 5

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

有很多方法可以做单例(取决于你对某人是否可以创建你的类的非单例实例的偏执程度)。此处的示例:我的 Objective-C 单例应该是什么样的?

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

于 2013-10-19T06:44:56.700 回答
1

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

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

于 2013-10-19T06:42:04.313 回答
1

如前所述 - 避免使用全局变量,但如果你确定需要它们 - 就像在 c 语言中一样:

在一个文件中定义这个变量

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

于 2013-10-19T06:44:35.667 回答
1

简单地说:不要这样做!

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

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

于 2013-10-19T06:45:13.597 回答
0

三个答案:

  • 不要这样做。
  • 如果必须这样做,请使用单例。
  • 要非常容易地访问用户名和非机密(即密码)变量,请使用 NSUserDefaults。
于 2013-10-19T06:46:53.853 回答