IOS编程 之 本地存储

-(void)dealloc{
    [super dealloc];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationController.navigationBar.translucent = NO;
    [self getDocumentsPath];
    [self writeString];
    [self writeArray];
    [self writeDic];
    [self writeToString];
    [self writeData];
    [self userDefaultsWrite];
   
    [self archiveObject];
    [self unarchiveObject];
}

- (void)getDocumentsPath{
    //获取沙盒路径
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSLog(@"1===%@",paths);
    
}
#pragma mark 字符串的写入和读取
//字符串的写入和读取
- (void)writeString{
    //获取文件地址
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    //获取第一个字符串
    NSString *string = [paths objectAtIndex:0];
    //创建存储字符串的路径
    string = [NSString stringWithFormat:@"%@%@",string,@"/text.txt"];
    
    NSError *error = nil;
    NSString *value = @"范总擦黑板";
    //写入到文件中
    [value writeToFile:string atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error) {
        NSLog(@"error == %@",error);
    }
    //字符串的读取
    
    NSString *read = [[NSString alloc]initWithContentsOfFile:string encoding:NSUTF8StringEncoding error:&error];
    NSString *read1 = [NSString  stringWithContentsOfFile:string encoding:NSUTF8StringEncoding error:&error];
    NSLog(@"%@",read1);
    
    NSLog(@"读取字符串 :%@",read);
    [read release];
    
}
#pragma mark 数组的写入和读取
//数组的写入和读取
- (void)writeArray{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *string = [paths objectAtIndex:0];
    //创建存储数组的路径
    string = [NSString stringWithFormat:@"%@%@",string,@"/arr.txt"];
    //定义一个数组
    NSArray *array = [NSArray arrayWithObjects:@"KJJ",@"PYT", nil];
    //写入数组
    [array writeToFile:string atomically:YES ];
    
    //读取
    NSArray *read = [[NSArray alloc]initWithContentsOfFile:string];
    NSLog(@"读取数组 :%@",read);
    [read release];
}
#pragma mark 字典的写入和读取
//字典的写入和读取
- (void)writeDic {
    //获取文件地址
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     //获取第一个字符串
    NSString *string = [paths firstObject];
     //创建存储字符串的路径
    string = [NSString stringWithFormat:@"%@%@",string,@"/dic.txt"];
    //定义一个字典
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"A",@"a",@"B",@"b"
                         , nil];
    
    [dic writeToFile:string atomically:YES];
    //
    NSDictionary *read = [[NSDictionary alloc]initWithContentsOfFile:string];
    NSLog(@"读取字典 :%@",read);
    [read release];
}
- (void)writeToString{
    //先读取 在拼接  然后重新写入
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *string = [paths firstObject];
    
    string = [NSString stringWithFormat:@"%@/text.txt",string];
    
    NSString *write = @"搜噶";
    [write writeToFile:string atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    NSLog(@"%@",string);
    
}
//二进制对象的写入
- (void)writeData {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *string = [paths firstObject];
    string = [NSString stringWithFormat:@"%@%@",string,@"/data"];
    
    //将字符串转换为utf8类型的二进制编码格式
    NSString *value = @"o ha yo gu za yi ma si";
    //只有这一种方法
    NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding];
    [data writeToFile:string atomically:YES];
    NSLog(@"%@",data);
    
    //读取
    NSData *read = [NSData dataWithContentsOfFile:string];
    //只有这一种方法
    NSString *read1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",read);
    NSLog(@"%@",read1);
    
}
- (void)userDefaultsWrite{
    //轻量级存储 存储一些和登陆信息有关的 存储方式和字典一样
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"不得不爱" forKey:@"name"];
    //同步存储
    [defaults synchronize];
    
}

- (void)readUserDefaults{
    NSString *value = [[NSUserDefaults standardUserDefaults]objectForKey:@"name"];
    NSLog(@"%@",value);
}
//复杂类型的对象存储  针对自己创建的类和对象  model
//归档 即将自己创建的model类对象转换为二进制格式  通过二进制格式进行存储
- (void)archiveObject{
    Student *student = [[Student alloc]init];
    student.name = @"金在中";
    student.sex = @"男";
    student.age = 20;
    //NSArray *array = [NSArray arrayWithObjects:student, nil];
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];
    //写入
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *string = [paths firstObject];
    string = [NSString stringWithFormat:@"%@/model",string];
    [data writeToFile:string atomically:YES];
    
}
//解档  将归档后的二进制文件解档为相对应的model类型对象

- (void)unarchiveObject{
    NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *string = [paths firstObject];
    string = [NSString stringWithFormat:@"%@/model",string];
    
    NSData *data = [NSData dataWithContentsOfFile:string];
    
    Student *model = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"%@,%@,%d",model.name,model.sex,model.age);
    
}


本地存储之归档与解档

//归档协议 序列化协议
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.sex forKey:@"sex"];
    NSNumber *num = [NSNumber numberWithInt:self.age];//装换类型
    [aCoder encodeObject:num forKey:@"age"];
}
//解档,反序列化
- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];//decode 反编码
        self.sex = [aDecoder decodeObjectForKey:@"sex"];
        NSNumber *num = [aDecoder decodeObjectForKey:@"age"];
        self.age = [num intValue];
        
        
        
        
    }
    return self;
}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值