CRUserDefaults
是一个辅助类,它提供了向 [NSUserDefaults standardUserDefaults]
写入数据的接口。其独特之处在于,允许 standardUserDefaults 作为对象运行,因此您只需向其中添加属性,然后在实现文件中将该属性声明为 @dynamic,就可以在 standardUserDefaults 中自动创建一个新属性。
您还可以声明任何类型的对象属性,它也将被存储,但对于自定义对象,您应该实现 NSCoding
协议。
需要注意的是,所有属性必须是对象指针,因此如果您要声明布尔属性,则必须将其声明为 NSNumber
。
CRUserDefaults
CRUserDefaults
,您可以将数据存储封装在 NSUserDefault 的一个地方。很简单,创建一个这个类的子类,并向其添加属性。请记住在实现文件中将所有属性声明为 @dynamic。
@interface CRCustomDefaults : CRUserDefaults
@property (nonatomic, strong) USer current;
+ (CRCustomDefaults *) shared;
@end
@implementation CRUserDefaults
@dynamic current;
+ (CRCustomDefaults *) shared
{
return [super shared];
}
@end
如果您想在 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 文件。