2015-12-02 19 views
3

尝试在安全链中添加项目时保持-50。secItemAdd在swift中保持返回-50错误

var query = [String:AnyObject]() 
    query[kSecClass as String] = kSecClassGenericPassword 
    query[kSecAttrAccount as String] = "a" 
    query[kSecValueData as String] = "b" 
    let result = SecItemAdd(query as CFDictionary, nil); 

结果是-50。无法弄清楚为什么,需要帮助..提前致谢。

回答

5

我相信kSecValueData键的值需要是NSData,而不是String或NSString。尝试将您的字符串编码为数据(例如使用UTF-8编码)。未测试的片段:

query[kSecValueData as String] = "b".dataUsingEncoding(NSUTF8StringEncoding) 

以供将来参考,错误代码-50对应于errSecParam,其SecBase.h头文档作为含义:“一个或多个参数传递到功能是无效的。”如果再次看到此错误,请尝试更改传入查询字典的值。

+0

立即生效,非常感谢。 – user1470393

+0

我有关于钥匙链的另一个问题,你能帮忙吗? http://stackoverflow.com/questions/34053049/seccopyerrormessagestring-gives-use-of-unresolved-identifier-in-swift – user1470393