我从这里使用常见的Keychain-wrapper: iOS: How to store username/password within an app?
这是我的Set-Code:
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil];
[keychain setObject:username forKey:@"Username"];
[keychain setObject:password forKey:@"Password"];
[keychain release];
这是我的获取代码:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *password = [prefs stringForKey:@"Password"];
if ([password length] != 0)
{
return password;
}
else
{
return nil;
}
我只收回NIL,我做错了什么?
答案 0 :(得分:5)
您使用KeychainItemWrapper
存储值,然后尝试使用NSUserDefaults
检索它们。这些是两个完全不同的后备存储,因此您需要使用KeychainItemWrapper
来检索您的值。您还应该使用kSecValueData
和kSecAttrAccount
。
你链接的文章实际上有答案。
//Set
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil];
[keychain setObject:username forKey:kSecAttrAccount];
[keychain setObject:password forKey:kSecValueData];
[keychain release];
//Retrieve
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil];
NSString *password = [keychainItem objectForKey:kSecValueData];
if ([password length] != 0)
{
return password;
}
else
{
return nil;
}
[keychain release];