Ios 什么可能导致SecItemAdd或SecItemCopyMatching失败?

Ios 什么可能导致SecItemAdd或SecItemCopyMatching失败?,ios,keychain,sskeychain,Ios,Keychain,Sskeychain,我使用此方法检索保存的值(并使用SecItemAdd最初添加它): 这段代码对大多数用户来说运行良好,但我的一小部分用户(

我使用此方法检索保存的值(并使用
SecItemAdd
最初添加它):

这段代码对大多数用户来说运行良好,但我的一小部分用户(<1%)遇到的结果表明此处的读写操作失败。不幸的是,我的代码会吞下任何错误(即,当它们发生时,不会在任何地方记录它们),因此我无法说出它失败的原因,也无法在我的任何开发设备上重现该问题


有人知道可以在iOS设备上启用的任何安全/权限设置会导致
SecItemAdd
SecItemCopyMatching
失败吗?
我尝试过打开密码锁定,但似乎没有效果。

(事实上崩溃了)当您将
KSecReturnData
设置为true时,这方面运气好吗?我遇到了类似的问题,CopyMatching找不到任何内容,但当我尝试添加某些内容时,它表示该内容已经存在。@WDUK:对不起,我甚至不记得问过这个问题,也不记得我当时在做什么。我可能解决了这个问题,把它留给其他人来处理。@Music别担心,我今天早些时候发布了一个问题:祈祷有人看到它!
+ (NSData *)passwordDataForService:(NSString *)service 
        account:(NSString *)account error:(NSError **)error {

    CFTypeRef result = NULL;    
    NSMutableDictionary *query = [self _queryForService:service account:account];

    [query setObject:(__bridge id)kCFBooleanTrue 
        forKey:(__bridge id)kSecReturnData];
    [query setObject:(__bridge id)kSecMatchLimitOne 
        forKey:(__bridge id)kSecMatchLimit];
    status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);

    if (status != noErr && error != NULL) {
        *error = [NSError errorWithDomain:kSSKeychainErrorDomain code:status 
            userInfo:nil];
        return nil;
    }

    return (__bridge_transfer NSData *)result;
}