我在钥匙串中存储了一些信息,有一种情况我需要删除所有项目,而不是为所有密钥执行[keychain removeObjectForKey:theKey]
,我可以这样做:
NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass,
[self serviceName], kSecAttrService, nil];
return !SecItemDelete((CFDictionaryRef)spec);
代替?
我尝试了它并且它有效,只是不确定我是否正在做正确的事情?
答案 0 :(得分:5)
在我的应用程序中我正在使用此行来清除我的钥匙串:
[[[KeychainItemWrapper alloc] initWithIdentifier:@"my_key" accessGroup:nil] resetKeychainItem]
答案 1 :(得分:0)
我相信你所做的是正确的,事实上,你可以根据需要避免查询中的kSecAttrService参数。另一方面,SecItemDelete返回一个OSStatus值,您可以检查该事务的更多详细信息。
NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass, nil];
OSStatus status = SecItemDelete((CFDictionaryRef)spec);
if (status == errSecSuccess)
return YES;
return NO;
Here are the codes以及可能的状态值的含义