Swift:如何存储用户偏好? [关闭]

Posted

技术标签:

【中文标题】Swift:如何存储用户偏好? [关闭]【英文标题】:Swift: How to store user preferences? [closed] 【发布时间】:2015-05-04 23:30:59 【问题描述】:

我对 ios 开发和 swift 还很陌生,我不确定我是否在想这件事。我目前正在开发一个应用程序,该应用程序在打开时要求用户输入他们的登录凭据。这变得乏味和令人沮丧,因为每次关闭并再次打开应用程序时,用户都必须登录。有没有一种简单的方法可以让程序记住用户是否已经登录?

我正在研究 CoreData,但每个示例都涉及每次都存储一个新对象,并且需要某种查询来获取信息。我真正需要的只是一个 bool isLoggedIn 和一个用于存储用户 ID 的 int。


编辑:

NSUserDefaults 正是我想要的。

【问题讨论】:

如果您需要存储密码,您可能需要查看NSUserDefaultskeyChain 'NSUserDefaults' 正如其他人所建议的那样完美。它们是为简单数据类型设置永久默认值的简单方法。 'CoreData' 更复杂,用于存储更复杂类型的数据,但对于整数、布尔值、字符串等简单的东西。'NSUserDefaults' 是完美的。 我会使用一个简单的 JSON 文件并使用 GPG 将其编码到某种疯狂的级别,钥匙串可以同步到 iCloud,即不安全。我不信任 Apple 的密码,你为什么要信任?有了钥匙串,如果有人偷/黑了你的手机或笔记本电脑,你可能就完蛋了。 我希望重新打开这个问题。它在我的搜索词中排名第一(也是唯一的)。虽然这个问题起初看起来有点宽泛,但两个答案表明它吸引了狭窄的主题答案。当前的答案很好,但我认为允许新的答案也会对这个问题有所帮助。 关闭原因可以改成这个问题的重复:***.com/questions/31203241/… 【参考方案1】:

您可以使用NSUserDefaults 来保存信息,并在下次应用启动时检索。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html

例如:

NSUserDefaults.standardUserDefaults().setObject("mynameisben", forKey: "username")

let userName = NSUserDefaults.standardUserDefaults().stringForKey("username")

Swift 3+ 更新

UserDefaults.standard.set("mynameisben", forKey: "username")

let userName = UserDefaults.standard.string(forKey: "username")

【讨论】:

NSUserDefaults 有一个特定的方法来检索一个字符串。它被称为 NSUserDefaults().stringForKey()。 BTW objectForKey() 返回一个可选的,如果让我们打开它或使用“??”,你应该使用它。如果没有存储值,则 nil 合并运算符返回默认值而不是 nil developer.apple.com/library/mac/documentation/Cocoa/Reference/…: NSUserDefaults.standardUserDefaults().synchronize()有必要吗? 在 Swift 3 中,NSUserDefaults 已重命名为 UserDefaultsstandard 是该对象的属性,方法签名为 set(Any?, forKey: string).object(forKey: string),以及检索其他类型的方法。 如果用户安装了两个应用程序,是否会有两个数据库分别存储值?【参考方案2】:

使用NSUserDefaults

Let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("User", forKey: "userName")

在您的AppDelegate.swift 中启动应用程序时检查用户名是否存在

didFinishLaunchingWithOptions

如果用户名存在,跳过登录页面

检查NSUserDefaults is nil

if (defaults.objectForKey(userName) != nil)  
// Skip Login 

else // Show login 
 

【讨论】:

您究竟是如何“跳过登录”的?这就像使经过身份验证的视图成为根控制器一样简单吗?如果没有人通过身份验证(由 NSUserDefaults 确定),然后在顶部显示登录名?

以上是关于Swift:如何存储用户偏好? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

寻找有关存储用户偏好的最佳实践的建议

Android文件存储--采用SharedPreferences保存用户偏好设置参数和读取设置参数

如何在 Swift 中正确存储用户设置?

应用程序关闭时如何发送本地通知(swift)?

ios应用数据存储方式(偏好设置)-转

如何添加到当前存储在用户默认值 Swift 4 中的数字