钥匙串无法获取数据

Kov*_*ovu 0 keychain ios

我从这里使用常见的Keychain-wrapper: iOS:如何在应用程序中存储用户名/密码?

这是我的Set-Code:

    KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil];
[keychain setObject:username forKey:@"Username"];
[keychain setObject:password forKey:@"Password"];

[keychain release];
Run Code Online (Sandbox Code Playgroud)

这是我的Get-Code:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *password = [prefs stringForKey:@"Password"];

if ([password length] != 0)
{
    return password;
}
else
{
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

我只收回NIL,我做错了什么?

Joe*_*Joe 5

您正在使用KeychainItemWrapper然后尝试使用它来检索它们来存储值NSUserDefaults.这些是两个完全不同的后备存储,因此您需要使用它KeychainItemWrapper来检索您的值.你也应该使用kSecValueDatakSecAttrAccount.

您链接到的文章实际上有答案.

//Set
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil];
[keychain setObject:username forKey:kSecAttrAccount];
[keychain setObject:password forKey:kSecValueData];

[keychain release];
Run Code Online (Sandbox Code Playgroud)


//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];
Run Code Online (Sandbox Code Playgroud)