我的iOS应用程序有一个登录界面。 用户名和密码将保存在NSUserDefaults中,并在再次进入应用程序时再次加载到登录屏幕中(当然,NSUserDefaults是永久的)。

现在,用户可以禁用用户名/密码保存功能。

NSUserDefaults会被清除。

但是在我的应用程序中,我需要这个用户名/密码的数据库查询用户。 所以:哪里存储数据除了NSUserDefaults? (这个地方可以/应该在用户退出应用程序或登出时删除)。


当前回答

签出这个示例代码 我首先从示例代码中尝试了apple的包装器,但这对我来说要简单得多

其他回答

你可以简单地使用NSURLCredential,它将在两行代码中保存用户名和密码。

请看我的详细回答。

如果您在使用钥匙串包装器检索密码时遇到问题,请使用以下代码:

NSData *pass =[keychain objectForKey:(__bridge id)(kSecValueData)];
NSString *passworddecoded = [[NSString alloc] initWithData:pass
                                           encoding:NSUTF8StringEncoding];

如果您需要ARC版本的包装器,请访问https://gist.github.com/1170641 多亏了

我尝试使用KeychainItemWrapper (ARC版本),但我发现它的Objective C包装器不如预期的那么健康。

我使用了Kishikawa Katsumi的这个解决方案,这意味着我写了更少的代码,不必使用类型转换来存储NSString值。

存储的两个例子:

[UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
[UICKeyChainStore setString:@"P455_w0rd$1$G$Z$" forKey:@"password"];

检索的两个例子

UICKeyChainStore *store = [UICKeyChainStore keyChainStore];
    // or
UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"YOUR_SERVICE"];

NSString *username = [store stringForKey:@"username"];
NSString *password = [store stringForKey:@"password"];

签出这个示例代码 我首先从示例代码中尝试了apple的包装器,但这对我来说要简单得多