热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

已成功将String值存储到钥匙串,但始终无法读出

如何解决《已成功将String值存储到钥匙串,但始终无法读出》经验,为你挑选了1个好方法。

我正在使用XCode8 + Swift3开发一个iOS项目。

我创建了以下两个函数来将字符串存储到钥匙串中并从钥匙串中读取它:

var query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: "my service",
    kSecAttrAccount as String: "my-key"
]

func storeString(value: String) -> Bool {
    if let data = value.data(using: .utf8) {
        // delete data if exist
        SecItemDelete(query as CFDictionary)

        // add value to query
        query[kSecValueData as String] = data

        // add to keychain
        let status = SecItemAdd(query as CFDictionary, nil)

        return status == noErr
    }
    return false
}

func readString() -> String? {
    // update query
    query[kSecReturnData as String] = kCFBooleanTrue
    query[kSecMatchLimit as String] = kSecMatchLimit

    var result: AnyObject?
    // fetch items from keychain
    let status: OSStatus = withUnsafeMutablePointer(to: &result) {
        SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0))
    }

    // I always get error -50 here
    if status == noErr {
        if let resultData = result as? Data {
            if let strVal = String(data: resultData, encoding: .utf8) {
                return strVal
            }
        }
    }
    return nil

}

我调用这些函数:

boolean hasStored = storeString(value: "John")
let readVal = readString()

hasStored就是true,但readVal始终nil。我调查了我的函数,发现在读取器函数中总是收到错误-50作为状态码(请参见函数中的注释)。

为什么?为什么我看不到我存储在钥匙串中的值(我不确定它是否确实存储了,但是我的确status == noErr总是truestoreString(value:)函数中进行调整)



1> Max..:

您的代码中有一个错字:

query[kSecMatchLimit as String] = kSecMatchLimit
//                                ^~~~~~~~~~~~~~

kSecMatchLimit是键,不是有效值。期望值应为CFNumberkSecMatchLimitOnekSecMatchLimitAll。如果您希望退回单个物品,请使用kSecMatchLimitOne。另请参阅搜索属性键和值。


推荐阅读
author-avatar
上当受骗的家_908
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有