CRUserDefaults 0.1.1

CRUserDefaults 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布时间最后发布2015年1月

Carlos Rios 维护。



  • 作者:
  • Carlos Rios

CRUserDefaults 是一个辅助类,它提供了向 [NSUserDefaults standardUserDefaults] 写入数据的接口。其独特之处在于,允许 standardUserDefaults 作为对象运行,因此您只需向其中添加属性,然后在实现文件中将该属性声明为 @dynamic,就可以在 standardUserDefaults 中自动创建一个新属性。

您还可以声明任何类型的对象属性,它也将被存储,但对于自定义对象,您应该实现 NSCoding 协议。

需要注意的是,所有属性必须是对象指针,因此如果您要声明布尔属性,则必须将其声明为 NSNumber

为什么使用 CRUserDefaults

  1. 因为使用 CRUserDefaults,您可以将数据存储封装在 NSUserDefault 的一个地方。
  2. 因为它提供了更好的文档,供其他开发者了解应用程序的全局变量。
  3. 因为它可以作为存储自定义数据的接口,您无需担心存储信息和加载信息的方式。
  4. 因为它可以作为缓存机制使用。

使用方式

很简单,创建一个这个类的子类,并向其添加属性。请记住在实现文件中将所有属性声明为 @dynamic。

子类化

 @interface CRCustomDefaults : CRUserDefaults

 @property (nonatomic, strong) USer current;

 + (CRCustomDefaults *) shared;

 @end

 @implementation CRUserDefaults
 @dynamic current;

 + (CRCustomDefaults *) shared
 {
      return [super shared];
 }
 @end

实现 NSCoding 协议的用户类

如果您想在 CRUserDefaults 中存储自定义对象,您必须在其中实现 NSCoding 协议。以下是一个 CRUser 类的示例。

 @interface CRUser : NSObject <NSCoding>

 @property (nonatomic, copy) NSString name;
 @property (nonatomic, copy) NSString lastName;
 @property (nonatomic, copy) NSString email;
 @property (nonatomic, copy) NSNumber age;

 - (instancetype)initWithName:(NSString *)name lastName:(NSString *)lastName;

 @end

 @implementation CRUser

 - (instancetype)initWithName:(NSString *)name lastName:(NSString *)lastName
 {
  self = [super init];
  if (self) {
      _name = [name copy];
      _lastName = [lastName copy];
  }
   return self;
 }

 -(id) initWithCoder:(NSCoder *) aDecoder
 {
      _name = [aDecoder decodeObjectForKey:knameKey];
      _lastName = [aDecoder decodeObjectForKey:klastNameKey];
      _email = [aDecoder decodeObjectForKey:kemailKey];
      _age = [aDecoder decodeObjectForKey:kageKey];
      return self;
 }

 -(void) encodeWithCoder:(NSCoder *) encoder
 {
      [encoder encodeObject:_name forKey:knameKey];
      [encoder encodeObject:_lastName forKey:klastNameKey];
      [encoder encodeObject:_email forKey:kemailKey];
      [encoder encodeObject:_age forKey:kageKey];
 }

 @end

要运行示例项目,克隆仓库,然后首先从 Example 目录运行 pod install

要求

iOS 5 或更高版本。

安装

作者

Carlos Rios,[email protected]

许可证

CRUserDefaults 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。