因爲NSUserDefaults 不支持保存自定類,保存的對象須要實現NSCoding協議,不過自定的類型就算實現了NSCoding也不能夠保存,能夠經過如下方法實現:post
//h文件 #import <Foundation/Foundation.h> @interface People : NSObject<NSCoding> @property(nonatomic,copy)NSString *name; @property(nonatomic,copy)NSString *age; @end //m文件 #import "People.h" @implementation People - (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeObject:_age forKey:@"age"]; } - (id)initWithCoder:(NSCoder *)aDecoder{ _name= [aDecoder decodeObjectForKey:@"name"] ; _age= [aDecoder decodeIntegerForKey:@"age"]; return self; } @end
經過實現atom
NSKeyedArchiver轉換成NSData而後保存到NSUserDefaults中,而後取值的時候能夠經過NSKeyedUnarchiver讀NSData得到對應的user,代碼以下:spa
NSUserDefaults *userDefault= [NSUserDefaults standardUserDefaults]; People *p = [[People alloc]init]; p.name = @"張飛"; p.age = @"32"; //將對象轉化爲字節流 NSData *data = [NSKeyedArchiver archivedDataWithRootObject: p]; [userDefault setObject:data forKey:@"user"]; //同步 [nsuser synchronize]; //獲取 NSData *getdata =[nsuser objectForKey:@"user"]; //解碼 People *getP = [NSKeyedUnarchiver unarchiveObjectWithData:getdata]; NSLog(@"%@",getP.name);