首页 > 代码库 > 一、利用NSUserDefaults进行对短小数据的存和取(自定义对象的存取)。

一、利用NSUserDefaults进行对短小数据的存和取(自定义对象的存取)。

NSString * string = [NSString stringWithFormat:@"JiangR"]; 

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 

 [userDefaults setObject:string forKey:@"string"];//存放。

 [userDefaults synchronize];//同步文件,否则程序非正常退出的时候信息将不被保存

 NSLog(@"string:%@",[userDefaults objectForKey:@"string"]);//读取的结果。string:JiangR 

 

备注:

NSUserDefaults 

只能对如下几类数据进行存取(NSString、NSNumber、NSDate、NSArray、NSDictionary).

如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不能成功的.

可以让这个自定义类实现协议中的

- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法,然后把该自定义的类对象编码到

NSData中,再从NSUserDefaults中进行读取,

举例如下:

#import 

@interface MySubView :  

NSObject<NSCoding> 

  NSString * _title; 

   NSString * _content; 

@property(nonatomic,retain)NSString * title; 

@property (nonatomic,retain)NSString * content; 

@end 

 #import "" 

//若要对类对象进行enCode/deCode.就必须先对类对象的成员变量进行enCode/deCode 

//对类实例的成员变量进行解码

 - (id)initWithCoder:(NSCoder *)aDecoder 

{   

  if(self = [super init]){ 

    self.title = [aDecoder decodeObjectForKey:@"title"]; 

    self.content = [aDecoder decodeObjectForKey:@"content"]; 

  } 

  return self; 

 //对类实例的成员变量进行编码

 - (void)encodeWithCoder:(NSCoder *)aCoder 

{   

  [aCoder encodeObject:_title forKey:@"title"]; 

    [aCoder encodeObject:_content forKey:@"content"]; 

@end 

 

以上是自定义一个类

MySubView继承NSOject. 

在另一个文件中:

MySubView * subView = [[MySubView alloc] init]; 

 [subView setContent:@"什么叫做。。。。?"]; 

 [subView setTitle:@"什么叫做title??"]; 

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 

 NSData * data = [NSKeyedArchiver archivedDataWithRootObject:subView];//将id类型转换成可存放在NSUserDefaults中的NSDate类型。

 [userDefaults setObject:data forKey:@"subView"]; 

 [userDefaults synchronize]; 

NSData * data_ = [[NSUserDefaults standardUserDefaults] objectForKey:@"subView"];//从NSUserDefaults中读取数据。

 MySubView * string = [NSKeyedUnarchiver unarchiveObjectWithData:data_];//将读取的数据反向转换成之前的类型。

NSLog(@":%@ --- :%@",string.title,string.content); 

//打印结果::什么叫做title?? --- :什么叫做。。。。?

 

 

 

一、利用NSUserDefaults进行对短小数据的存和取(自定义对象的存取)。