gpt4 book ai didi

ios - 无法从 SecItemCopyMatching 检索数据

转载 作者:行者123 更新时间:2023-11-29 10:44:10 30 4
gpt4 key购买 nike

我正在将一个项目添加到钥匙串(keychain),然后我想获取该项目的值(value)。问题是,它原来是一个空字符串。我究竟做错了什么?谢谢!

//add item to keychain
NSDictionary *secItem = @{ (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService : [[NSBundle mainBundle] bundleIdentifier],
(__bridge id)kSecAttrAccount : myKeyVar,
(__bridge id)kSecValueData : [myValue dataUsingEncoding:NSUTF8StringEncoding],
(__bridge id)kSecAttrSynchronizable : @YES };

OSStatus status = SecItemAdd((__bridge CFDictionaryRef)secItem, NULL);
//successfully adds it

//query for existing item
NSDictionary *query = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService : [[NSBundle mainBundle] bundleIdentifier],
(__bridge id)kSecAttrAccount : keyToSearchForVar,
(__bridge id)kSecAttrSynchronizable : @YES,
(__bridge id)kSecReturnAttributes : (__bridge id)kCFBooleanTrue};

CFDictionaryRef valueAttributes = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query,
(CFTypeRef *)&valueAttributes);
NSDictionary *attributes = (__bridge_transfer NSDictionary *)valueAttributes;
//attributes has 8 key/value pairs but I don't see the stored encoded value as one of them

if (status == errSecSuccess) {
NSString* myString = [[NSString alloc] initWithData:[attributes objectForKey:(__bridge id)kSecValueData] encoding:NSUTF8StringEncoding];
//myString is @""
}

最佳答案

问题是我定义了 kSecReturnAttributes 来要求它返回属性,但没有定义 kSecReturnData 来返回实际数据,这很重要。在查询中添加这一行解决了问题:

(__bridge id)kSecReturnData : (__bridge id)kCFBooleanTrue}

关于ios - 无法从 SecItemCopyMatching 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23027727/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com