3

我有此代码当前将信息存储到 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];
4

1 回答 1

4

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

创建您的钥匙串对象,然后调用objectForKey:. 如果结果是,nil那么您知道该键不存在现有值。

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

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

于 2013-03-20T03:33:26.300 回答