Swift:如何存储用户偏好? [关闭]
Posted
技术标签:
【中文标题】Swift:如何存储用户偏好? [关闭]【英文标题】:Swift: How to store user preferences? [closed] 【发布时间】:2015-05-04 23:30:59 【问题描述】:我对 ios 开发和 swift 还很陌生,我不确定我是否在想这件事。我目前正在开发一个应用程序,该应用程序在打开时要求用户输入他们的登录凭据。这变得乏味和令人沮丧,因为每次关闭并再次打开应用程序时,用户都必须登录。有没有一种简单的方法可以让程序记住用户是否已经登录?
我正在研究 CoreData,但每个示例都涉及每次都存储一个新对象,并且需要某种查询来获取信息。我真正需要的只是一个 bool isLoggedIn 和一个用于存储用户 ID 的 int。
编辑:
NSUserDefaults 正是我想要的。
【问题讨论】:
如果您需要存储密码,您可能需要查看NSUserDefaults
和keyChain
。
'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
已重命名为 UserDefaults
,standard
是该对象的属性,方法签名为 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:如何存储用户偏好? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章