- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用钥匙串(keychain)服务来保存一个值,即使用户重新安装应用程序,该值也会持续存在。所以我使用 SecItemCopyMatching
检查一个项目是否存在,它第一次返回 errSecItemNotFound
并使用 SecItemAdd
添加一个新项目,它返回 errSecSuccess
,但是_attrs
的值为nil
。此外,当第二次调用该代码时,SecItemCopyMatching
仍会返回 errSecItemNotFound
,就好像未调用 SecItemAdd
一样。那么这可能与什么有关?
CFMutableDictionaryRef _attrs = nil;
NSString* key = @"<unique key>";
NSMutableDictionary* query = [NSMutableDictionary dictionary];
query[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword;
query[(__bridge id)kSecAttrLabel] = key;
query[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne;
query[(__bridge id)kSecReturnAttributes] = (__bridge id)kCFBooleanTrue;
OSStatus err = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef*)&_attrs);
if (err == errSecSuccess) {
return YES;
}
NSString* str = @"<some data>";
if (err == errSecItemNotFound) {
query[(__bridge id)kSecValueData] = NSData_from_string(string_from_NSString(str));
query[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleAlways;
err = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef*)&_attrs);
assert(err == errSecSuccess);
}
最佳答案
您正在为调用 SecItemAdd
重新使用 query
,并且此函数的字典中存在的 kSecMatchLimit
值正在中断它。您应该在调用 SecItemAdd
之前删除此 key 。
还值得注意的是,[str dataUsingEncoding:NSUTF8StringEncoding]
可能是比 NSData_from_string(string_from_NSString(str))
更好的选择,具体取决于您使用的是什么做。
关于ios - SecItemCopyMatching 不断返回 errSecItemNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765597/
与 REST API 通信并将 API token 保存在 iOS 的钥匙串(keychain)中。但钥匙串(keychain)代码抛出 nil 错误。 KeychainAccess.swift: p
我正在尝试使用钥匙串(keychain)服务来保存一个值,即使用户重新安装应用程序,该值也会持续存在。所以我使用 SecItemCopyMatching 检查一个项目是否存在,它第一次返回 errSe
我有一个在钥匙串(keychain)中存储访问 token 的 iOS 应用程序。在过去的几个月里,我注意到大约 2% 的用户在尝试检索 token 时收到 errSecItemNotFound。 所
我使用钥匙串(keychain)存储用户名和密码,有时当我试图获取用户名的密码时,它告诉我 errSecItemNotFound。 我一直认为密码一直存在于keychain中,为什么找不到呢? 谢谢。
这个问题困扰我好久了,希望有大侠能指点一下。本质上,我有 一小部分 的用户无法将项目保存/更新到钥匙串(keychain)。有问题的控制流程如下: 我们使用 SecItemCopyMatching 检
我将密码存储到 iOS 钥匙串(keychain)中,然后检索它们以在我的应用程序上实现“记住我”(自动登录)功能。 我在 Security.framework 周围实现了自己的包装器功能( SecI
我将密码保存到带有 Touch ID 标志的钥匙串(keychain): + (void)setPasscode:(NSString *)passcode { CFErrorRef error
我使用钥匙串(keychain)来存储敏感数据。 自 iOS 9.2 beta 3 以来,我无法检索从以前版本的 iOS(例如 iOS 9.1)创建的敏感数据。使用 SecItemCopyMatchi
我是一名优秀的程序员,十分优秀!