2

我不确定这种情况的正确模式是什么,所以我不确定在这里搜索什么......

基本上,我想让我的 iOS (iPhone) 应用程序始终从登录页面开始。从那里,我需要应用程序的其余 ViewControllers 才能访问登录信息,但我不确定最好的方法是什么......

  • 我是否以某种方式创建某种形式的全局变量?
  • 我是否将类的实例传递给每个 ViewController 并为每个 ViewController 提供一个属性来保存此登录信息?
  • 我是否以某种方式在缓存/临时/应用程序文件夹中存储了一些令牌,每个人都可以从中读取以获取登录信息?
4

4 回答 4

5

您可以使用包含用户凭据的对象的共享实例。你也可以把它放在你的应用程序委托中的一个属性或对象中,或者你可以将它写入磁盘(NSUserDefaults 或特殊文件)。

但是,对于敏感的登录凭据,建议使用钥匙串进行持久性。

我想我会结合使用钥匙串来持久化数据和共享实例或类方法来在整个应用程序中检索它。

于 2013-06-19T17:02:14.627 回答
2

iOS中有一个概念NSUserDefaults,用于将轻量级信息存储在iPhone内存中。

查看此示例以了解在示例 1NSUserDefaults和示例 2中存储和检索数据。


编辑 :

由于您要存储登录名和密码,请使用keychain. 这是一个钥匙串示例

于 2013-06-19T16:56:35.257 回答
0

这是一个简单但有用的方法:

用于NSUserDefaults存储BOOL命名的didAuthUser

每当您想显示需要进行身份验证检查的视图控制器didAuthUser(通常是根视图控制器)时,如下所示:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if ([prefs boolForKey:@"didAuthUser"]) {
    //Get stored credentials
}else{
    //Show login view controller
}

因此,当用户开始使用您的应用程序时,您将能够显示登录视图控制器。如果用户已经登录,您必须检查存储的凭据(使用钥匙串,不要在 NSUserDefaults 中存储敏感信息

使用钥匙串不是一个非常简单的过程,您可能想要使用类似这样的东西

如果您使用sskeychain,一个简单的实现将使用以下方法:

+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;

+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;

请注意,找回密码的方法需要一个帐户,您可以使用NSUserDefaults此帐户。NSUserDefaults只要密码在钥匙串上是安全的,就可以存储帐户。

这样您就可以访问整个应用程序的登录数据。

快乐编码!

于 2013-06-19T18:33:22.037 回答
0

您可以使用 NSUserDefaults 来存储用户名/密码,但如果您只需要登录凭据或令牌来进行新的服务调用,并且您通常将它们发送到 HTTP 请求的标头中,我只需将它们设置在你的服务类,所以你真的不需要将它存储在任何地方。

如果您想存储登录响应中的信息(如姓名、电子邮件等),我通常在我的项目中有一个 Constant 类来保存全局引用和其他常量(我不喜欢在 AppDelegate 中保存东西并且有它包含在每个类中),并且我有一个包含所有用户信息的用户类。我在 Constant 类上保留了该 User 对象的引用。它比必须将其传递给应用程序中的每个 ViewController 更简单。

于 2013-06-19T17:05:53.773 回答