如何检查iPhone钥匙链中是否存储了某些东西?

如何检查iPhone钥匙链中是否存储了某些东西?,iphone,sdk,keychain,Iphone,Sdk,Keychain,我有这段代码,目前正在将信息存储到iPhone钥匙链中。我如何用一个简单的if语句检查是否已经存储了同名的内容,以防止重复存储,并告诉我这是否是用户第一次使用该应用程序 KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" accessGroup:nil]; [keychain setObject:username.text forKey:(_

我有这段代码,目前正在将信息存储到iPhone钥匙链中。我如何用一个简单的if语句检查是否已经存储了同名的内容,以防止重复存储,并告诉我这是否是用户第一次使用该应用程序

KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" accessGroup:nil];
        [keychain setObject:username.text forKey:(__bridge id)(kSecAttrAccount)];
        [keychain setObject:password.text forKey:(__bridge id)(kSecValueData)];
        keychain = nil;

        usernameAll = [keychain objectForKey:(__bridge id)kSecAttrAccount];
        passwordAll = [keychain objectForKey:(__bridge id)kSecValueData];

你不会造成双重存储。您将覆盖任何现有值

创建钥匙链对象,然后调用
objectForKey:
。如果结果为
nil
,则您知道该键没有现有值

KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" accessGroup:nil];
if ([keychain objectForKey:(__bridge id)(kSecAttrAccount)]) {
    // existing value
} else {
    // no existing value
}

检查用户是否第一次使用某个应用程序,通常是在第一次使用该应用程序时将值写入
NSUserDefaults
。启动时,将检查此值。如果该值存在,则它不是第一次运行。如果您需要此检查以在应用程序删除和重新安装后继续运行,则使用keychain而不是
NSUserDefaults
来存储此标志。

可能重复Hey,我已测试了上述代码是否将值存储在keychain中。但是上面的代码是在
条件下运行的,但是我没有使用
[keychain objectForKey:(uu桥id)(kSecAttrAccount)]
获得值。原因可能是什么?@I-droid如果您有问题,请发表您自己的问题。这里是:注意,这种方法不适用于受触摸ID保护的钥匙链项目-要获取值,您需要使用触摸ID进行身份验证。。。