Latest 1.0.6
Homepage https://github.com/wang82426107/SDUserDefaults
License Copyright (c) 2015年 Lisa. All rights reserved.
Platforms ios 9.0, requires ARC
Authors
所有属性必须遵循NSCoding协议(自定义类可继承于SDCodingObject;Foundation中的基础类已经实现NSCoding协议方法)!!!! 包括数组成员变量以及字典成员变量中的元素!!!!

导入方式

手动导入: 下载演示Demo以及 SDUserDefaults. 把SDUserDefaults文件夹导入你自己的项目合适位置. 使用方法可以看 自定义使用基本使用方式

cocoapod导入方式如下所示,使用方法可看 自定义使用 模块.

   pod 'SDUserDefaults'

然后 pod install

基本使用方式 (导入方式推荐:手动导入)

1.下载演示Demo以及 SDUserDefaults.

2.把SDUserDefaults文件夹导入你自己的项目合适位置,文件夹中主要包含SDUserDefaultsSDCodingObject两个类.

3.在SDUserDefaults的.h文件中添加你想要存储的属性,这里需要注意的是属性必须是遵循NSCoding协议的类,Foundation中的类都已经遵循该协议.如下图所示.

这时候有人会问,那我自定义的类需要怎么办?难道我需要自己实现NSCoding协议中的– (void)encodeWithCoder– (instancetype)initWithCoder方法吗?完全不需要!你需要继承于SDCodingObject这个类即可,我在其中都做了NSCoding协议的实现,并且所有的属性都会进行归档操作.例如上图的TestModel类.代码如下所示.

4.存储数据:只需要我们把对应的属性进行赋值,然后调用saveUserInfoAction方法即可.代码如下所示.

    [SDUserDefaults standardUserDefaults].name = @"用户数据";
    TextModel *testModel = [[TextModel alloc] init];
    testModel.name = @"骚栋";
    testModel.age = @(15);
    testModel.location = @"北京";
    [SDUserDefaults standardUserDefaults].testModel = testModel;
    [[SDUserDefaults standardUserDefaults] saveUserInfoAction]; // 存储数据

5.获取数据:直接取值就好,简单粗暴,没有任何问题.代码如下所示.

    /*****获取数据*****/
    NSLog(@"%@",[SDUserDefaults standardUserDefaults].name);
    NSLog(@"%@",[SDUserDefaults standardUserDefaults].testModel.name);
    NSLog(@"%@",[SDUserDefaults standardUserDefaults].testModel.age);
    NSLog(@"%@",[SDUserDefaults standardUserDefaults].testModel.location);

6.删除数据:想要删除数据直接调用deleteUserInfo即可.

    [[SDUserDefaults standardUserDefaults] deleteUserInfo];

7.更新数据:想要删除的话,就把那个属性置为nil,想要修改某个属性就把那个属性修改,最后调用saveUserInfoAction方法保存即可.

    [SDUserDefaults standardUserDefaults].name = @"新的用户数据";
    [SDUserDefaults standardUserDefaults].testModel.location = nil;
    [[SDUserDefaults standardUserDefaults] saveUserInfoAction]; // 更新数据

8.忽略归档属性:不想让部分属性进行归档持久化怎么办?使用 unEncodePropertys 即可.添加忽略的属性名称则该属性不会进行归档操作,注意,要忽略尽量在
saveUserInfoAction前使用吆~

    [SDUserDefaults standardUserDefaults].testModel.unEncodePropertys = @[@"age",@"names"];

SDUserDefaults 自定义使用 (导入方式推荐:手动导入和cocoapods都可)


有很多的童鞋会说,我凭啥要用你的SDUserDefaults来初始化啊,我就想自己写一个UserDefaults单例来管理我自己的存储属性不行啊?

行,当然可以了,在1.0.3版本的时候,骚栋增加了一个新的类,叫做SDUserObject类,只需要你写的单例继承于这个类,并且使用 – (instancetype)initWithIdentifier 方法来初始化,那么依然可以使用强大的属性,但是自己书写的代码量会大大减少.我们来看一下Demo中的例子是如何使用的吧.

基本操作什么的,还是如同上一个模块一样.我们来看一下存储的单例类是定义的.我们需要让单例类继承于SDUserObject类,如下图所示.

然后在创建单例的时候需要使用带有标识符参数的 – (instancetype)initWithIdentifier 方法进行初始化.如下图所示.

然后在保存和删除的方法上使用saveAllPropertyActiondeleteAllPropertyAction 即可.

这里对几个问题做一下解释.

  • 为什么会有SDUserObject类的出现?

答:后期的SDUserDefaults会使用cocoapods进行管理,那么到时候如果通过cocoapods引入的时候不能去改动源码吧,所以我们通过继承于SDUserObject的方式来使用SDUserDefaults这个三方,同时呢,现在手动导入的方式,也会有很多童鞋有这样的自定义类的需求,所以SDUserObject的出现是很有必要的~

  • 为什么在初始化SDUserObject类或者子类的时候需要使用 – (instancetype)initWithIdentifier 这个带有标识符的初始化方法呢?

答:唯一标识符identifier的作用是做了存储的key来使用的.如果有的童鞋写了两个单例类,但是用了相同的identifier就会出现数据错乱问题,所以这里我把这个唯一标识符暴露在.h属性中,用于个别童鞋进行单独的定制.只要保证全局唯一即可.

SDUserDefaults 的Keychain存储


SDUserDefaults 的1.0.0版本是基于NSUserDefaults进行存储的,由于NSUserDefaults是使用的明文plist文件进行存储,所以安全性有一定的欠缺,那么有的童鞋想来个更加安全的存储,是否可以呢?当然了,在1.0.6版本,骚栋对于Keychain存储方式已经做了添加,我们可以使用两种方式来实现Keychain存储方式.

  • 手动导入SDUserDefaults时,我们可以直接修改 SDKeychainUserDefaults 单例,使用方式和 SDUserDefaults 类一致即可.但是 SDKeychainUserDefaults 的存储位置是在Keychain,而不是NSUserDefaults中.

  • cocoapods导入方式只需要使用 initKeychainObjectWithIdentifier: 即可. 如下所示. 可以查看Demo中的TestUserDefaults的初始化方法.

历史版本

  • 1.0.0 SDUserDefaults初次创建

  • 1.0.1 SDUserDefaults对数组中的元素是否遵循NSCoding协议进行的提示完善

  • 1.0.2 添加忽略归档数组unEncodePropertys,可忽略部分属性进行归档操作.

  • 1.0.3 新增SDUserObject类,用于自定义单例类使用.

  • 1.0.5 添加SDUserObject,添加cocoapods导入方式.

  • 1.0.6 添加keychain存储方式,安全性更高!

SDUserDefaults交流反馈QQ群: 214575341

点击查看博客

Latest podspec

{
    "name": "SDUserDefaults",
    "version": "1.0.6",
    "license": "Copyright (c) 2015u5e74 Lisa. All rights reserved.",
    "summary": "u5229u7528NSUserDefaults,runtimeu548cu5f52u6863u5febu901fu5b58u50a8u504fu597du8bbeu7f6eu6570u636e",
    "homepage": "https://github.com/wang82426107/SDUserDefaults",
    "authors": {
        "u795eu7ecfu9a9au680b": "[email protected]"
    },
    "source": {
        "git": "https://github.com/wang82426107/SDUserDefaults.git",
        "tag": "1.0.6"
    },
    "requires_arc": true,
    "platforms": {
        "ios": "9.0"
    },
    "source_files": "SDUserDefaults/*.{h,m}"
}

Pin It on Pinterest

Share This