可能导致SecItemAdd或SecItemCopyMatching失败的原因是什么?

时间:2013-08-06 15:28:49

标签: ios keychain sskeychain

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

+ (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;
}

此代码适用于大多数用户,但我的一小部分用户(<1%)正在遇到结果,表明此处的读取或写入失败。不幸的是,我的代码吞没了任何错误(即当它们出现时不会将它们记录在任何地方)所以我不知道为什么它在世界上失败了,我无法在我的任何开发设备上重现这个问题。 / p>

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

0 个答案:

没有答案