我正在尝试使用KeyChain,并且没有包装器。但是,当我想读取值时,我的代码会崩溃。
代码:
CFDictionaryRef attributes = CFDictionaryCreate(NULL, keys, values, 5, NULL, NULL);
CFDataRef result;
OSStatus status = SecItemAdd(attributes, (CFTypeRef *)&result);
if (status == errSecSuccess) {
if (result && CFGetTypeID(result) == CFDataGetTypeID()) { //crashes here
NSLog(@"Data");
}
isSuccess = YES;
} else {
fprintf(stderr, "Error while inserting into keychain osstatus:%ld\n", status);
}错误: EXC_BAD_ACCESS
我做错了什么?我认为SecItemAdd可以返回新添加的项
编辑:
const void *keys[] = {
kSecClass
, kSecAttrAccessible
, kSecAttrService
, kSecAttrAccount
, kSecValueData
};
const void *values[] = {
kSecClassGenericPassword
, kSecAttrAccessibleWhenUnlocked
, (__bridge CFStringRef)service
, (__bridge CFStringRef)account
, data //CFDataRef
};发布于 2014-05-16 13:31:04
来自文件:
若要作为CFDataRef类型的对象获取添加项的数据,请指定值为kCFBooleanTrue的返回类型键kSecReturnData。
发布于 2014-05-16 13:39:30
为什么要获得EXC_BAD_ACCESS,答案是因为您传递给SecItemAdd的字典必须是可变的。
试着做这样的事情:
CFMutableDictionaryRef属性= CFDictionaryCreateMutable(NULL,size,&kCFCopyStringDictionaryKeyCallBack,&kCFTypeDictionaryValueCallBack); CFDictionaryAddValue(属性、keysx、valuesx);
https://stackoverflow.com/questions/23696067
复制相似问题