9

我在钥匙串中存储了一些信息,有一种情况是我需要删除所有项目,而不是[keychain removeObjectForKey:theKey]为所有钥匙做,我可以这样做:

NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass,
                      [self serviceName], kSecAttrService, nil];

return !SecItemDelete((CFDictionaryRef)spec);

反而?

我试过了,它奏效了,只是不确定我做的是否正确?

4

2 回答 2

5

在我的应用程序中,我使用这条线来清除我的钥匙串:

[[[KeychainItemWrapper alloc] initWithIdentifier:@"my_key" accessGroup:nil] resetKeychainItem]
于 2013-03-06T11:27:52.007 回答
0

我相信您所做的是正确的,实际上,您可以根据需要避免查询中的 kSecAttrService 参数。另一方面,SecItemDelete 返回一个 OSStatus 值,您可以检查该值以获取有关事务的更多详细信息。

    NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass, nil];

    OSStatus status = SecItemDelete((CFDictionaryRef)spec);
    if (status == errSecSuccess)
       return YES;

    return NO;

以下是可能的状态值的代码和含义

于 2013-03-26T19:30:52.127 回答