ios – 在Keychain服务中使用SecItemUpdate

前端之家收集整理的这篇文章主要介绍了ios – 在Keychain服务中使用SecItemUpdate前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码在钥匙串中创建钥匙串项目:
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
    [dict setObject: (__bridge id) kSecClassGenericPassword  forKey: (__bridge id) kSecClass];
    [dict setObject: MYKEY           forKey: (__bridge id) kSecAttrService];
    [dict setObject: @"0" forKey: (__bridge id) kSecValueData];
    SecItemAdd ((__bridge CFDictionaryRef) dict,NULL);

哪个工作正常.如果我想更改此项,是否有人可以为SecItemUpdate提供准确的语法?

更新:具有以下内容

NSMutableDictionary *query = [NSMutableDictionary dictionary];
NSMutableDictionary *attributesToUpdate = [NSMutableDictionary dictionary];

[query setObject: (__bridge id) kSecClassGenericPassword forKey: (__bridge id) kSecClass];
[query setObject: MYKEY forKey: (__bridge id) kSecAttrService];
[query setObject: (id) kcfBooleanTrue forKey: (__bridge id) kSecReturnData];

NSString *numberOfBalloonsString = [NSString stringWithFormat:@"%d",numberOfBalloonsUsed];
NSData *numberOfBalloonsData = [numberOfBalloonsString dataUsingEncoding:NSUTF8StringEncoding];

[attributesToUpdate setObject: numberOfBalloonsData forKey:(__bridge id)kSecValueData];

OSStatus error = SecItemUpdate ((__bridge CFDictionaryRef) query,(__bridge CFDictionaryRef) attributesToUpdate);
NSLog(@"Error #: %ld",error);

我收到错误代码-50 =

One or more parameters passed to the function were not valid.

解决方法

SecItemUpdate非常详细.

SecItemUpdate的查询参数记录为查询(在其他函数中使用)以及模糊语句:“指定要更改其值的项目”.这似乎意味着您必须在此字典中包含您想要更改的现有属性值,但我认为您不会这样做.我发现您可以使用相同的查询获取要更新的项目的属性.

attributes参数应该是SecItemCopyMatching的结果,其中包含kSecValueData键和添加的值以及任何属性已更改.

猜你在找的iOS相关文章