使用 UserDefaults 为不同用户存储数据

Posted

技术标签:

【中文标题】使用 UserDefaults 为不同用户存储数据【英文标题】:Use UserDefaults to store data for different users 【发布时间】:2018-01-18 09:26:21 【问题描述】:

我正在尝试在我的 ios 应用中保存两个不同用户的数据。我确实设法使用这样的 Sharedpreferences 在 android 中保存了两个或多个用户的登录和个人资料详细信息。

getSharedPreferences (String FIRST_USER, int mode) getSharedPreferences (String SECOND_USER, int mode) ...

通过这种方法,我将只检查当前用户的userid 并在启动时加载SharedPrefs 文件,然后使用相同的KEY - VALUE 对从current_users sharedPref 文件中读取数据。而当用户切换时,只需加载不同的文件,一切都会改变。

我知道 UserDefaults 相当于 iOS 中的 sharedprefs 但我不知道是否 我可以用不同的 SharedPrefs 文件做类似于我在 android 中所做的事情。

在 iOS 编程方面没有任何高经验。

感谢任何帮助。

【问题讨论】:

请提供哪些类型的用户数据可用? 使用 NSArchiever @Jaydeep 这将是简单的 StringValues 一些 API 参数,如用户 ID、名称、mobnum 等。 @Shezad 你能告诉我更多关于 NSArchiever 以及我如何使用它来实现我想要的吗? 【参考方案1】:

1.使用以下方法获取保存数据的路径:

func filePath(key:String) -> String 
    let manager = FileManager.default
    let url = manager.urls(for: .documentDirectory, in: .userDomainMask).first
    return (url!.appendingPathComponent(key).path)

2.使用以下代码存储您的数据:

NSKeyedArchiver.archiveRootObject(data, toFile: filePath(key: "anyKey"))

3.使用以下代码获取您保存的数据:

if let data = NSKeyedUnarchiver.unarchiveObject(withFile:filePath(key:"anyKey")) 
       //here you will get your data
       print(data)

注意:此处使用与存储数据相同的密钥

【讨论】:

感谢您提供详细信息。我可以使用此代码创建文件,但是当我尝试存储和打印数据时,我什么也得不到。可能我误解了data thingy..你能对此发表评论吗?我正在这样使用它。创建文件 -> filePath(key:"MyFileName").. 存储数据 -> NSKeyedArchiver.archiveRootObject("MY STRING", toFile: filePath(key: "MyFileName")).. to print data -> let data = NSKeyedUnarchiver.unarchiveObject(withFile:filePath(key :“我的文件名”))。打印(数据)` 第一次不打印。首先,您必须存储数据,然后尝试为两者使用相同的键进行打印 @Joe 它对我来说很好用。你能分享一下你是如何使用它的代码吗???

以上是关于使用 UserDefaults 为不同用户存储数据的主要内容,如果未能解决你的问题,请参考以下文章

从特定的核心数据表行中检索值 - 然后将值存储到 UserDefaults

[MAC OS ] UserDefaults

swift--使用UserDefaults来进行本地数据存储

在 UserDefaults 中存储字典

与应用程序和扩展程序共享时,UserDefaults 数据存储在哪里?

swift---数据存储