我的iOS应用程序有一个登录界面。 用户名和密码将保存在NSUserDefaults中,并在再次进入应用程序时再次加载到登录屏幕中(当然,NSUserDefaults是永久的)。
现在,用户可以禁用用户名/密码保存功能。
NSUserDefaults会被清除。
但是在我的应用程序中,我需要这个用户名/密码的数据库查询用户。 所以:哪里存储数据除了NSUserDefaults? (这个地方可以/应该在用户退出应用程序或登出时删除)。
我的iOS应用程序有一个登录界面。 用户名和密码将保存在NSUserDefaults中,并在再次进入应用程序时再次加载到登录屏幕中(当然,NSUserDefaults是永久的)。
现在,用户可以禁用用户名/密码保存功能。
NSUserDefaults会被清除。
但是在我的应用程序中,我需要这个用户名/密码的数据库查询用户。 所以:哪里存储数据除了NSUserDefaults? (这个地方可以/应该在用户退出应用程序或登出时删除)。
当前回答
签出这个示例代码 我首先从示例代码中尝试了apple的包装器,但这对我来说要简单得多
其他回答
如果您需要ARC版本的包装器,请访问https://gist.github.com/1170641 多亏了
一个非常简单的解决方案通过钥匙链。
它是系统Keychain的一个简单包装。只需添加SSKeychain.h, SSKeychain。m、SSKeychainQuery.h和SSKeychainQuery.h。m文件到您的项目中,并将Security.framework添加到您的目标。
保存密码:
[SSKeychain setPassword:@"AnyPassword" forService:@"AnyService" account:@"AnyUser"]
查询密码。
NSString *password = [SSKeychain passwordForService:@"AnyService" account:@"AnyUser"];
其中setPassword是你想要保存的值,forService是你想要保存的变量,account是密码和其他信息的用户/对象。
对于swift,你可以使用这个库:
https://github.com/jrendel/SwiftKeychainWrapper
它支持所有版本的swift。
上面的代码中有一个小错误(顺便说一下,戴夫,你的帖子非常有帮助,谢谢你)
在保存凭据的部分,它还需要以下代码才能正常工作。
[self.keychainItem setObject:@"myCredentials" forKey:(__bridge id)(kSecAttrService)];
最有可能的原因是,当我们第二次尝试(重新)使用相同的凭据登录时,它会发现它们已经分配在钥匙链项中,应用程序就会崩溃。使用上面的代码,它就像一个魅力。
签出这个示例代码 我首先从示例代码中尝试了apple的包装器,但这对我来说要简单得多