iOS KeyChain secItemAdd 崩溃

标签 ios objective-c keychain

我正在尝试使用 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可以返回新添加的item

编辑:

const void *keys[] = {
    kSecClass
  , kSecAttrAccessible
  , kSecAttrService
  , kSecAttrAccount
  , kSecValueData
};

const void *values[] = {
    kSecClassGenericPassword
  , kSecAttrAccessibleWhenUnlocked
  , (__bridge CFStringRef)service
  , (__bridge CFStringRef)account
  , data //CFDataRef
};

最佳答案

来自文档:

To obtain the data of the added item as an object of type CFDataRef, specify the return type key kSecReturnData with a value of kCFBooleanTrue.

关于iOS KeyChain secItemAdd 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23696067/

相关文章:

Objective-C 从方法返回枚举数组

ios - 模拟器中没有 Touch ID/Face ID 提示

iOS 键盘 - 在应用程序级别以编程方式设置 keyboardAppearance 等属性

ios - Xcode 不允许我对 UIView 使用 NSObject 的 init() 函数

ios - 如果我必须下载 image.png 和 image@2x.png 从服务器上传到哪里?

ios - 如何防止将扩展导出到 Objective-C 的 Swift header ?

iPhone 应用程序图标未注册

ios - 如何在Sprite kit和objective c中检测两个节点的碰撞点

iphone钥匙串(keychain)项目在应用程序卸载后仍然存在?

xcode - 在 Xcode 安装的 git 中禁用 osxkeychain 凭证助手