钥匙串返回零

时间:2017-10-28 23:47:02

标签: ios swift keychain

最后更新

我正在使用pod'KeychainSwift',每当我尝试从Keychain获取某些内容时它返回nil,这是我设置值的函数:

    private func saveUser(email:String!, password:String!)->Bool{
        if keychain.set(email, forKey: "email", withAccess: .accessibleAfterFirstUnlock) {
            if keychain.set(password, forKey: "password") {
                print("User saved succesfully")
                return true
            } else {
                return false
            }
        } else {
            return false
        }
    }

    func setToken(token:String!){
        if keychain.set(token!, forKey: "token", withAccess: .accessibleAfterFirstUnlock) {
            print("Success...")
        } else {
            print("Error: Line 36 GeneraFire")
            print(keychain.lastResultCode)
        }
    }

当我尝试使用此函数检索值时:

func getToken()-> String!{
    return keychain.get("token")
}

它返回nil(getEmail和getPassword也返回nil)。 我打开了Keychain Sharing功能,我有权利。但它不会起作用。

更新: 更明确的实际问题是我通过saveUser函数保存用户,并说它成功保存(错误代码0)但是当我检索它时,它返回nil,错误代码为“-25300”,我相信根据文件,它代表“未找到物品”

我根据裴勇俊做了修改但它仍然不起作用(链接现在有更新的代码)

第二次更新 我只是将相同的代码GeneraFire放在一个空白项目中,它工作正常。所以我的项目是如何导致问题的。

1 个答案:

答案 0 :(得分:1)

我相信这个问题是由String引起的!强行解开。 GeneraFire中的所有字符串都由String!。

声明
func getToken()-> String?{
        return keychain.get("token")
 }

 func getEmail()-> String?{
        return keychain.get("email")
 }

 if let status = result["status"] as? String! 
 >>  if let status = result["status"] as? String
  

当您不确定向下转换是否成功时,请使用类型转换运算符的条件形式(作为?)。这种形式的运算符将始终返回一个可选值,如果无法进行向下转换,则该值将为nil。这使您可以检查成功的向下转发。

如果让状态=结果["状态"]为?串

  1. 结果["状态"]为?串
  2. 由于结果[" status"]返回一个可选值,"为?"表示该值可以为nil并且转换为" String"

    1. if let status
    2. 如果投射结果"结果["状态"]为?字符串"有一个可选值,解包并为状态赋值。

      Keychain Sharing功能与此问题无关。由于钥匙串绑定到设备而不是应用程序,如果您需要在设备中的应用程序之间共享钥匙串值,那么您可以启用"钥匙串共享功能"