ios 持久化保存(存储)

读取本地json文件

NSString *filePath=[[NSBundle mainBundle]pathForResource:@"queryCart"ofType:@"json"];
    NSData *jdata = [[NSData alloc]initWithContentsOfFile:filePath];
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jdata options:NSJSONReadingMutableContainers error:nil];

保存到沙盒

//1.获得沙盒根路劲
  NSString *home=NSHomeDirectory();
   
    NSLog(@"%@",home);
    
//2.document的路径
    //NSString *docPath=[home stringByAppendingString:@"/Documents"];
    NSString *docPath=[home stringByAppendingPathComponent:@"Documents"];
    NSLog(@"%@",docPath);//获取文档路劲
    
    NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory=[path objectAtIndex:0];
    NSLog(@"%@\n %@",documentDirectory,[path lastObject]);//获取文档路径,数组中只有一个文件
     
//3.
//新建数据,字典,数组
    NSArray *data=@[@"jack",@20,@"aaaa"];
    NSString *filePath=[docPath stringByAppendingPathComponent:@"data.plist"];
    
    [data writeToFile:filePath atomically:YES];

从沙盒读取

NSString *home=NSHomeDirectory();
    
    NSString *docPath=[home stringByAppendingPathComponent:@"Documents"];
   
    NSString *filePath=[docPath stringByAppendingPathComponent:@"data.plist"];
    
   NSArray *arr= [NSArray arrayWithContentsOfFile:filePath];
    
    NSLog(@"%@",arr);

使用NSUserDefault 保存,偏好设置

//利用NSUserDefaults就能直接访问软件的偏好设置(Library/Preferences)
    NSUserDefaults *Default=[NSUserDefaults standardUserDefaults];
     [Default setObject:@"DH" forKey:@"account"];
    [Default setObject:@"123" forKey:@"pwd"];
    [Default setInteger:10 forKey:@"age"];
    [Default setBool:YES forKey:@"auto_login"];
    
    [Default synchronize];


使用NSUserDefault 读取

//利用NSUserDefaults就能直接访问软件的偏好设置(Library/Preferences)
    NSUserDefaults *Default=[NSUserDefaults standardUserDefaults];
    
    NSString *str=[Default objectForKey:@"account" ];
    BOOL isAuto=[Default boolForKey:@"auto_login"];
    int age=[Default integerForKey:@"age"];
    
    NSLog(@"%@,%d,%d",str,isAuto,age);

使用NSKeyedArchiver 归档 保存(

注意:DHPerson 需要实现遵守协议 NSCoding 并且实现 方法initWithCoder: 和 encodeWithCoder:

/**
 *  将对象归档的时候会调用(将对象写入文件之前会调用)
 *  在这个方法说清楚,1.那些属性需要存储 2.怎样存储这些属性
 */
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];
    
    [aCoder encodeInt:_age forKey:@"age"];
}

/**
 *  当从文件中解析对象时候调用
 * 1.那些属性需要解析 2.怎样解析这些属性
 */
-(id)initWithCoder:(NSCoder *)aDecoder
{
    if (self=[super init]) {
       _name=[aDecoder decodeObjectForKey:@"name"];
        _age=[aDecoder decodeIntForKey:@"age"];
    }
    return self;
}

 

DHPerson *person=[[DHPerson alloc]init];
    person.name=@"张三";
    person.age=20;
    person.height=1.73;
    
    NSString *home=NSHomeDirectory();
    NSLog(@"%@",home);
   
    NSString *filePath=[home stringByAppendingPathComponent:@"person.data"];
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];

使用NSKeyedArchiver 解档 读取

NSString *home=NSHomeDirectory();
    NSString *filePath=[home stringByAppendingPathComponent:@"person.data"];
    
    DHPerson *person=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    
    NSLog(@"%@,%@,%d",person,person.name,person.age);

 

posted on 2015-08-17 16:36  二狗你变了  阅读(251)  评论(0)    收藏  举报

导航