参考自:iOS: How to store username/password within an app?
你应该使用Keychain来保存用户名和密码。Apple提供了例子来存储和删除keychain项。
导入Security.framework,把KeychainItemWrapper .h & .m文件加入到工程中,在需要用到的keychain的地方导入.h文件,如下实例化一个类:
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
使用如下的方法来保存用户名和密码:
[keychainItem setObject:@"password you are saving" forKey:kSecValueData];
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];
使用如下的方法来获取到它:
NSString *password = [keychainItem objectForKey:kSecValueData];
NSString *username = [keychainItem objectForKey:kSecAttrAccount];
使用如下的方法来删除:
[keychainItem resetKeychainItem];
在使用的kSecValueData来保存密码是,可能会出现崩溃,例如
Keychain Wrapper erminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[_NSZeroData _fastCharacterContents]
此处建议,使用kSecAttrService来代替kSecValueData。
在iOS8,使用Obj-c和ARC来使用keychain
- 从此处https://gist.github.com/dhoerl/1170641/download 获取要使用的keychainItemWrapper, 把KeychainItemWrapper.h 和 .m加入你的工程中。
- 加入 Security framework
- 导入#import “KeychainItemWrapper.h”
保存数据
NSString *emailAdress = self.txtEmail.text; NSString *password = self.txtPasword.text; //because keychain saves password as NSData object NSData *pwdData = [paswoord dataUsingEncoding:NSUTF8StringEncoding]; //Save item self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil]; [self.keychainItem setObject:emailAdress forKey:(__bridge id)(kSecAttrAccount)]; [self.keychainItem setObject:pwdData forKey:(__bridge id)(kSecValueData)];
读取数据
self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil]; self.txtEmail.text = [self.keychainItem objectForKey:(__bridge id)(kSecAttrAccount)]; //because label uses NSString and password is NSData object I convert NSData *pwdData = [self.keychainItem objectForKey:(__bridge id)(kSecValueData)]; NSString *password = [[NSString alloc] initWithData:pwdData encoding:NSUTF8StringEncoding]; self.txtPaswoord.text = password;