我的iOS应用程序有一个登录界面。 用户名和密码将保存在NSUserDefaults中,并在再次进入应用程序时再次加载到登录屏幕中(当然,NSUserDefaults是永久的)。

现在,用户可以禁用用户名/密码保存功能。

NSUserDefaults会被清除。

但是在我的应用程序中,我需要这个用户名/密码的数据库查询用户。 所以:哪里存储数据除了NSUserDefaults? (这个地方可以/应该在用户退出应用程序或登出时删除)。


当前回答

但是,现在您可以使用NURLCredential而不是钥匙链包装器。它做了我们需要做的事。

其他回答

签出这个示例代码 我首先从示例代码中尝试了apple的包装器,但这对我来说要简单得多

但是,现在您可以使用NURLCredential而不是钥匙链包装器。它做了我们需要做的事。

如果您需要ARC版本的包装器,请访问https://gist.github.com/1170641 多亏了

如果你的应用有一个相关的域,最好使用管理共享凭证。它将为用户提供最好的体验,并由系统本身进行管理。

步骤1:

用webcredentials密钥设置您的关联域

步骤2

标记文本框

userIdTextField.textContentType = .username
passwordTextField.textContentType = .password

步骤3

每当用户成功登录时,使用以下代码保存详细信息。iOS将显示一个确认操作表,供用户保存密码。下次用户尝试登录时,键盘将为你的应用程序建议用户凭据。

SecAddSharedWebCredential("www.example.com" as CFString, "user_id" as CFString, "password" as CFString) { error in
    if error != nil {
      // Handle error
      return
    }

    // The credentials have been successfully saved.
}

现在你已经准备好了。 阅读更多…? !

对于swift,你可以使用这个库:

https://github.com/jrendel/SwiftKeychainWrapper

它支持所有版本的swift。