使用用户首选项保存数据

IOS应用中往往需要保存一些用户的基本信息,如一些习惯,对界面的一些个性化调整等等。这些数据往往比较小,放到数据库里面比较麻烦,也没有必要保存到服务器,所以可以使用IOS中的NSUserDefaults

使用NSUserDefaults非常简单,只需要获取到一个全局的用户数据变量,然后通过KVO进行存取。

  • 首先,获取全局的用户信息变量
//获取用户数据
    var userDefault = NSUserDefaults.standardUserDefaults()
  • 存储数据
userDefault.setBool(date, forKey: "keyname")
  • 读取数据
var data = userDefault.boolForKey("keyname")

这样存储的数据只要没有删除过应用,那么数据就不会消失,很适合存储一些跟用户使用习惯有关的小的数据。

### 如何在用户首选项中存储对象数据 #### Java (Android) 对于 Android 开发中的 `SharedPreferences`,其设计初衷是为了处理简单类型的键值对存储。为了能够存储复杂的数据结构(如自定义对象),通常的做法是先将这些对象序列化成字符串形式再存入 `SharedPreferences` 中。 一种常见的做法是利用 JSON 来实现这一目标: ```java // 导入库 import org.json.JSONObject; import android.content.Context; import android.content.SharedPreferences; public class UserPreferences { private static final String PREF_NAME = "app_prefs"; public void saveObject(Context context, Object obj, String key){ try { // 创建Gson实例并转换object为json string Gson gson = new Gson(); String jsonString = gson.toJson(obj); // 获取shared preferences编辑器 SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); // 将JSON字符串写入到指定key对应的value位置上 editor.putString(key, jsonString); // 提交更改 editor.apply(); } catch(Exception e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") public <T> T loadObject(Context context, Class<T> clazz, String key){ try{ // 读取对应key下的string value SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); String jsonString = prefs.getString(key, null); if(jsonString != null && !jsonString.isEmpty()){ // 使用gson解析返回的对象 Gson gson = new Gson(); return (T) gson.fromJson(jsonString, clazz); } }catch(Exception ex){ ex.printStackTrace(); } return null; } } ``` 此代码片段展示了如何通过 Google 的 GSON 库来完成对象与 JSON 字符串之间的相互转化[^1]。 #### Swift (iOS) 而在 iOS 上,则可以通过编码解码机制配合 `UserDefaults` 实现相似的功能。这里以 Swift 编程语言为例说明: ```swift struct Person: Codable { var name: String var age: Int } class UserDefaultsManager { let userDefaultsKey = "person_key" func savePerson(person: Person) -> Void { do { let data = try JSONEncoder().encode(person) UserDefaults.standard.set(data, forKey: userDefaultsKey) } catch { print(error.localizedDescription) } } func getSavedPerson() -> Person? { guard let data = UserDefaults.standard.data(forKey: userDefaultsKey), let person = try? JSONDecoder().decode(Person.self, from: data) else {return nil} return person } } ``` 上述例子中,`Codable` 协议使得我们可以轻松地把模型类转化为 Data 对象以便于保存至 `UserDefaults` 或者从之恢复出来[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值