使用Swift Keychain Wrapper时出现意外崩溃

时间:2018-06-12 02:18:24

标签: ios swift keychain

我最近介绍了Swift Keychain Wrapper,这是一个非常有用的工具,可以简单地保存和检索用户登录信息。我创建了两个按钮:一个用于保存用户名和密码,另一个用于检索和填写用户名和密码。

然而,如果用户做的第一件事就是点击"检索并填写"按钮,应用程序崩溃:

  

线程1:致命错误:在解包可选值时意外发现nil

我有一个" if"用于提醒用户,如果没有任何保存,则应该提醒他们,但程序只是跳过它。我需要一些帮助。

带有问题的代码片段是:(致命错误发生在" else"部分)

//Actions for retrieving username and password 
@IBAction func retrieveUsernameButtonTapped(_ sender: UIButton) {

    //Alert user if there is nothing to be retrieved
    if  KeychainWrapper.standard.string(forKey: "userName") == "" || KeychainWrapper.standard.string(forKey: "userPassword") == "" {
        let alertController = UIAlertController(title: "Error", message: "You don't have any saved User ID and Password!", preferredStyle: .alert)

        let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alertController.addAction(defaultAction)

        self.present(alertController, animated: true, completion: nil)

    }

    //Else proceed to filling in
    else {
    let retrievedUsername: String? = KeychainWrapper.standard.string(forKey: "userName")
    print("Retrieved username is: \(retrievedUsername!)")
    emailTextField.text = (retrievedUsername!)

    let retrievedPassword: String? = KeychainWrapper.standard.string(forKey: "userPassword")
    print("Retrieved password is: \(retrievedPassword!)")
    passwordTextField.text = (retrievedPassword!)
    }
}

1 个答案:

答案 0 :(得分:0)

基本错误 - 替换:

KeychainWrapper.standard.string(forKey: "userName") == ""

为:

KeychainWrapper.standard.string(forKey: "userName") == nil

作品。

Duh,""仍然有一些字符串