SecAddItem只返回errSecParam,无论我做什么



由于某些原因,我不能得到这个简单的钥匙链代码工作。

//Let's create an empty mutable dictionary:
NSMutableDictionary *keychainItem = [NSMutableDictionary dictionary];
NSString *username = self.nwUsernameTxtFld.text;
NSString *password = self.passwordTxtFld.text;
//Populate it with the data and the attributes we want to use.
keychainItem[(__bridge id)kSecClass] = (__bridge id)kSecClassInternetPassword; // We specify what kind of keychain item this is.
keychainItem[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleWhenUnlocked; // This item can only be accessed when the user unlocks the device.
keychainItem[(__bridge id)kSecAttrServer] = @"http://www.myawesomeservice.com";
keychainItem[(__bridge id)kSecAttrAccount] = username; //Our username.
if(SecItemCopyMatching((__bridge CFDictionaryRef)keychainItem, NULL) == noErr)
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"The Item Already Exists", nil)
                                                    message:NSLocalizedString(@"Please update it instead.", )
                                                   delegate:nil
                                          cancelButtonTitle:NSLocalizedString(@"OK", nil)
                                          otherButtonTitles:nil];
    [alert show];
}else
{
    NSLog(@"can add new item.");
    keychainItem[(__bridge id)kSecValueData] = password; //Our password
    OSStatus sts = SecItemAdd((__bridge CFDictionaryRef)keychainItem, NULL);
    NSLog(@"%d", (int)sts);
}

我已经查看了苹果公司关于此事的文档,并根据它:

传递给函数的一个或多个参数无效。

然而,SecAddItem函数有两个参数:

OSStatus SecItemAdd (
   CFDictionaryRef attributes,
   CFTypeRef *result
);

我传递NULL给结果。根据Apple的文档,这是可以接受的:

result返回对新添加项的引用。确切的类型的结果基于属性中提供的值,如下面讨论。如果不需要此结果,则传递NULL。

所以我真的不知道我做错了什么。我传递给它一个字典和一个NULL值。这个函数两个都期望,我把两个都给了它。有人能告诉我出了什么问题吗?

参考文档在这里

将键kSecValueData的数据类型插入字典中。如您问题底部的文档所示,它需要是CFDataRef(或桥接NSData),但您正在插入NSString。将NSString转换为NSData是一件小事,一旦您这样做,您将停止出现此错误。

我得到了这个错误设置错误的kSecClass。我使用了kSecClassInternetPassword而不是kSecClassGenericPassword。希望对大家有所帮助

相关内容

  • 没有找到相关文章

最新更新