- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的 iOS 应用程序中支持多个帐户,并且我正在使用 KeyChain 来存储凭据。我正在存储具有相同类 (kSecClassGenericPassword) 和属性 (kSecAttrService) 但具有不同用户名 (kSecAttrAccount) 的帐户。这工作正常,我可以使用不同的用户名登录。
我现在想检索这些用户名,这就是我遇到问题的地方。我将查询定义并执行为:
let objects = [kSecClassGenericPassword, "foo", kCFBooleanTrue,kSecMatchLimitAll]
let keys = [kSecClass,kSecAttrService kSecReturnAttributes,kSecMatchLimit]
let query = NSDictionary(objects: objects, forKeys: keys)
var dataTypeRef : Unmanaged<AnyObject>?
let status = SecItemCopyMatching(query, &dataTypeRef)
但只返回一项。我的 dataTypeRef 是一个 CFDictionary 而我希望它是一个 CFArray。
根据Apple Docs on SecItemCopyMatching
By default, this function returns only the first match found. To obtain more than one matching item at a time, specify the search key kSecMatchLimit with a value greater than 1. The result will be an object of type CFArrayRef containing up to that number of matching items.
正如您从我的代码中看到的那样,我已经完成了此操作,但没有成功。
谁能指出我正确的方向?
最佳答案
根据Apple Doc on SecItemCopyMatching这个函数的第二个参数是 UnsafeMutablePointer<AnyObject?>
.
请注意,这是来自最新文档的信息。
let keychainQuery: [NSObject: AnyObject] = [
kSecClass : kSecClassInternetPassword,
kSecReturnAttributes : kCFBooleanTrue,
kSecMatchLimit : kSecMatchLimitAll
]
var result: AnyObject?
let status = withUnsafeMutablePointer(&result) {
SecItemCopyMatching(keychainQuery, UnsafeMutablePointer($0))
}
if status == noErr {
print(result)
}
我目前正在一个项目中使用它并且效果很好。
希望对你有帮助。
关于ios - 如何从 Swift 中的 SecItemCopyMatching 返回多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26496987/
我是一名优秀的程序员,十分优秀!