ios学习记录 day36 UI12初级数据持久化(沙盒)

1.沙盒机制

文件夹之间不能通信

Finder前往 按Alt键 出来资源库

 

 

//返回类型是个数组 第一个参数是枚举,有很多文件夹类型   第三个参数YES的话是详细路径,NO的话~/最后一个文件夹名
//数组里放的是 同一文件下所有相同名字的文件夹 按角标取出我们要的

 NSArray *arr = NSSearchPathForDirectoriesInDomains(<#NSSearchPathDirectory directory#>, <#NSSearchPathDomainMask domainMask#>, <#BOOL expandTilde#>)

 

//返回bundle(.app)文件夹路径

-(NSString *)searchInBundle
{
    NSString *bundlePath = [[NSBundle mainBundle]pathForResource:@"InfoPlist" ofType:@"strings"];
    return bundlePath;
}
Bundle 程序运行时不可改 安装程序是只有这里有东西 用的时候把Bundle的东西拷贝到下面三个文件夹里用

Documents文件夹 存数据库 / coreData文件 限制不能超过20M

Library文件夹 caches存储图片 网址...  Preferences存储系统的配置文件NSUserDefaulfs

tmp文件夹 存储临时文件 老版本按home键自动清空 现在需要手动和上两个一样

 

 

 

2.简单对象的读写文件(NSString,Array,dic,set)

atomically 是否自动存储  encoding 编码格式(国际编码汉字一般用的 NSUTF8StringEncoding)   error:存储错误信息双指针类型

#pragma mark 字符串的写入 
-(void)writeWithString
{
    NSString *str = [self searchPath];
    //添加字符
//    NSString *newPath = [str stringByAppendingString:@"/text.txt"];
    //拼接字符
    NSString *newPath = [NSString stringWithFormat:@"%@/%@",str,@"text.txt"];
//    NSLog(@"newPath == %@",newPath);
    NSString *writeStr = @"xiaozhangdezifuchuan";
    
    NSError *error = nil;
    
    [writeStr writeToFile:newPath atomically:YES encoding:NSUTF8StringEncoding error:&error];//第四个参数直接写nil也可以
    if (error) {
        NSLog(@"error == %@",error);
    }
}

#pragma mark 字符串的读取
-(void)readWithString
{
    NSString *path = [self searchPath];
    NSString *newPath = [path stringByAppendingString:@"/text.txt"];
    
    NSError *error = nil;
    NSString *readStr = [NSString stringWithContentsOfFile:newPath encoding:NSUTF8StringEncoding error:&error];//+方法
    if (error) {
        NSLog(@"error ===== %@",error);
    }
    NSLog(@"read == %@",readStr);
    
    NSString *a = [[NSString alloc]initWithContentsOfFile:newPath encoding:NSUTF8StringEncoding error:&error];//-方法
    NSLog(@"a === %@",a);
    
}

 

//写入

1.创建要写入的内容

2.找路径 加新路径

3.写入方法writeToFile

4.调用

//读取

1.找路径 加名

2.读取方法ContentsOfFile

3.调用

 

 

//UIImage 转换成data类型

UIImage *image = [UIImage imageNamed:@"刘健.jpg"] ;
NSData *data = UIImagePNGRepresentation(image);

 

NSString *name = @"shengqingjun";
//字符串转换成2进制
NSData *data = [name dataUsingEncoding:NSUTF8StringEncoding];

 //2进制转换成字符串 只有一个方法
 NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

 

 

3.复杂对象的读写文件(自定义model,有属性/在Foundation框架内不存在,无法通过writeToFile写入,至少有一个实例对象)

NSCoding协议

 

ABPersonInfo.m//自定义的类型

//归档的方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
    [aCoder encodeObject:self.frame forKey:@"frame"];
}
//解档的方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeObjectForKey:@"age"];
        self.frame = [aDecoder decodeObjectForKey:@"frame"];
    }
    return self;
}

 

FirstViewController.m

//归档对象
-(void)archiveObject
{
    ABPersonInfo *person = [[ABPersonInfo alloc]init];
    person.name = @"sqj";
    person.age = [NSNumber numberWithInt:12];
    person.frame = [NSValue valueWithCGPoint:CGPointMake(10, 20)];
    
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person];
    
    NSString *path = [self searchPath];
    NSString *newPath = [path stringByAppendingString:@"/person.txt"];
    [data writeToFile:newPath atomically:YES];
}
//解档对象
-(void)unArchivedObject
{
    NSString *path = [self searchPath];
    NSString *newPath = [path stringByAppendingString:@"/person.txt"];
    NSData *data = [NSData dataWithContentsOfFile:newPath];
    //解档
    ABPersonInfo *person = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"name == %@,age == %@,frame == %@",person.name,person.age,person.frame);
}

 

4.NSUserDefaults 系统的一个简单的本地存储 plist文件 存的东西比较小

#pragma mark -
#pragma mark NSUserDefaults 存储小型数据
//存储
-(void)writeUserDefaults
{
    NSUserDefaults *object = [NSUserDefaults standardUserDefaults];
    //[object setObject:@"shenqingjun" forKey:@"name"];//第一个参数 系统的对象
    //添加内容
    [object setObject:@"aishangyipiyema" forKey:@"xinqing"];
    //同步存储
    [object synchronize];
}
//读取
-(void)readUserDefaules{
    NSUserDefaults *object = [NSUserDefaults standardUserDefaults];
    NSString *name = [object objectForKey:@"name"];
    NSLog(@"name == %@",name);
}

 

 

 

 

ios学习记录 day36 UI12初级数据持久化(沙盒),,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。