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