NSUserDefaults写入和读取自定义 用户信息类

来源:互联网 发布:关系数据库管理系统 编辑:程序博客网 时间:2024/06/19 06:08



NSUserDefaults写入和读取自定义类

转载请注明:http://blog.csdn.net/l863784757/article/details/45538599


NSUserDefaults可以存取一些短小的信息,例如:NSString, NSNumber, NSDate, NSArray, NSDictionary.


//存NSString *string = [NSString stringWithString @“test"];NSUserDefaults *userD = [NSUserDefaults standardUserDefaults];[userD setObject:string forKey:@“testKey"];//取NSString *value;value = [userD objectForKey:@“testKey”];




     但是如果想存一个自定义的NSObject对象,可以让这个自定义类实现<NSCoding>协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的协议protocol就是java的接口interface,就是C++的纯虚函数),然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。


例如我们常用的用来存用户登录信息的类



UserModel.h文件


#import <Foundation/Foundation.h>@interface UserModel : NSObject<NSCoding>@property(nonatomic, strong) NSNumber *score;@property(nonatomic, strong) NSNumber *level;@property(nonatomic, strong) NSString *name;@property(nonatomic, strong) NSString *avatar;@property(nonatomic, strong) NSNumber *com;@property(nonatomic, strong) NSNumber *mes;@end



UserModel.m文件


#import "UserModel.h"#define EC_USER_score       @"EC_USER_score"#define EC_USER_level       @"EC_USER_level"#define EC_USER_name        @"EC_USER_name"#define EC_USER_avatar      @"EC_USER_avatar"#define EC_USER_com         @"EC_USER_com"#define EC_USER_mes         @"EC_USER_mes"@implementation UserModel-(void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:self.score forKey:EC_USER_score];    [aCoder encodeObject:self.level forKey:EC_USER_level];    [aCoder encodeObject:self.name forKey:EC_USER_name];    [aCoder encodeObject:self.avatar forKey:EC_USER_avatar];    [aCoder encodeObject:self.com forKey:EC_USER_com];    [aCoder encodeObject:self.mes forKey:EC_USER_mes];}-(id)initWithCoder:(NSCoder *)aDecoder{    self = [super init];    if (self) {        if (aDecoder == nil) {            return self;        }        self.score = [aDecoder decodeObjectForKey:EC_USER_score];        self.level = [aDecoder decodeObjectForKey:EC_USER_level];        self.name = [aDecoder decodeObjectForKey:EC_USER_name];        self.avatar = [aDecoder decodeObjectForKey:EC_USER_avatar];        self.com = [aDecoder decodeObjectForKey:EC_USER_com];        self.mes = [aDecoder decodeObjectForKey:EC_USER_mes];    }    return self;}@end



存取:

//[self getUserModel:responseObject]这个返回的是一个UserModel对象,里面已保存数据

UserModel *user = [selfgetUserModel:responseObject];


//存

NSData *archiveCarPriceData = [NSKeyedArchiverarchivedDataWithRootObject:user];

    [[NSUserDefaultsstandardUserDefaults]setObject:archiveCarPriceDataforKey:@“UD_USER"];


//取

UserModel *user1 = [[UserModel alloc] init];

NSData *myEncodedObject = [[NSUserDefaultsstandardUserDefaults]objectForKey:UD_USER];

 user1 = [NSKeyedUnarchiverunarchiveObjectWithData: myEncodedObject];


0 0
原创粉丝点击