Swift 4 Keychain SecItemUpdate错误状态代码-50

时间:2018-05-29 00:57:17

标签: ios swift keychain

我正在尝试使用一些钥匙串代码来安全地持久存储一些敏感数据。我有保存和读取数据的功能,但是我似乎无法让更新工作。

select regexp_substr(display_name, '[^:]+$')
from t
where status = 'Success';

我不断收到错误状态-50,表示传递给该函数的一个或多个参数无效。我尝试阅读文档,但无法提出任何有效的方法。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

事实证明我必须从keychainQuery字典中删除最后两个键,所以它看起来像这样:

public class KeychainService: NSObject {
    class func updatePassword(service: String, account:String, data: String) {
        if let dataFromString: Data = data.data(using: String.Encoding.utf8, allowLossyConversion: false) {
            // Instantiate a new default keychain query
            let keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, account], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue])
            let status = SecItemUpdate(keychainQuery as CFDictionary, [kSecValueDataValue:dataFromString] as CFDictionary)
            if (status != errSecSuccess) {
                if let err = SecCopyErrorMessageString(status, nil) {
                    print("Read failed: \(err)")
                    print("status: \(status)")
                }
            }
        }
    }
...