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