当前位置: 首页 > 面试题库 >

SecItemCopyMatching的swift 2.0钥匙串类型错误

雍俊远
2023-03-14
问题内容

我们的Swift先前版本中有这段代码

    var retrievedData: NSData?
    var extractedData: Unmanaged<AnyObject>? = nil
    let status = SecItemCopyMatching(keyChainQuery, &extractedData)

    if (status == errSecSuccess) {
        if let validExtractedData = extractedData {
            let opaque = validExtractedData.toOpaque()
            retrievedData = Unmanaged<NSData>.fromOpaque(opaque).takeUnretainedValue()
        }
    }

但是,这现在给我们带来以下错误:

无法转换“ inout不受管理?”类型的值 (aka’inout
Optional>’)到预期参数类型’UnsafeMutablePointer’(aka’UnsafeMutablePointer>’)

我对如何解决它有些迷茫。我想我必须分配一些内存,为其创建一个UnsafeMutablePointer,然后将其提供给SecItemCopyMatching?

我尝试了这个:

    let sizeOfKey = 32
    var store = NSMutableData(capacity: sizeOfKey)!
    let status = SecItemCopyMatching(keyChainQuery, store.bytes)

但这给了我一个:

无法将类型’UnsafePointer’(aka’UnsafePointer
<()>’)的值转换为预期的参数类型’UnsafeMutablePointer’(aka’UnsafeMutablePointer>’)错误

有人知道吗?


问题答案:

看来,我们不再需要Unmanaged<>工作。

尝试:

var retrievedData: NSData?
var extractedData: AnyObject?
let status = SecItemCopyMatching(keyChainQuery, &extractedData)

if (status == errSecSuccess) {
    retrievedData = extractedData as? NSData
}


 类似资料:
  • 我正在研究使用Hibernate 4.1.9注释地图的不同方法 如果我想存储一个Map,其中键是实体值的属性,标记如下所示 请注意,上面的标记不会创建连接表,而是在运行时通过查询返回Map,因此Map是动态的,您不必在map中添加元素Java查询返回它们。 现在,我希望地图的内容反映应用程序添加到地图中的内容,而不是执行动态查询。 我想储存4种不同的地图 在这些情况下,键之间没有关系 我尝试了以下

  • Targets key To be discussed in order to avoid _Warning: potential malicious behavior - trust data has insufficient signatures for remote repository .dkr.ecr.us-east-1.amazonaws.com/app: valid signatur

  • Snapshot key To rotate the snapshot key: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app snapshot -r Enter passphrase for ne

  • Timestamp key The timestamp key can also be rotated: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app timestamp -r Enter the

  • 我想在更新时锁定一个特定的密钥。尝试了下面的示例代码。 上面的代码正在获取锁,但我仍然可以从redis-cli或其他应用程序访问密钥。 我怎么才能锁上钥匙?

  • U2F(安全钥匙) U2F 是 FIDO 联盟创立的用于网站进行公钥加密的开放认证标准。身份验证是通过提供的公钥给每个服务新建一个钥匙对来进行的。验证期间,客户端通过对服务器发起的挑战进行签名来证明它拥有私钥。【译者注:挑战即 挑战—应答验证 - Challenge–response authentication】 交换过程中不需要手动输入或复制代码也让 U2F 更加方便,且不容易收到网络钓鱼和中