码迷,mamicode.com
首页 > 移动开发 > 详细

IOS之plist 沙箱 归档 配置

时间:2015-03-18 00:58:24      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

Day04

1.Plist文件

   文件和数组 或者字典之间的转换

数组转换为plist:

   step1:创建数组

      NSArray *array=@[@"老杨",@"老郭",@"小泽"];

   step2:调用数组的writeToFile方法把数组转换为.plist存到指定的位置

      [arraywriteToFile:@"/User/tarena6/a.plist" atomically:YES]

      atomically:这个参数意思是如果为YES则保证文件的写入原子性,就是说会先创建一个临时文件,直到文件内容写入成功再导入到目标文件里.
如果为NO,则直接写入目标文件里.

 

plist转换为数组:

NSArray*array=[NSArray arrayWithContentsOfFile:@"/User/gjh/a.plist "]

 

2.沙箱

工程名称:.app保存着工程中用到的所有素材,此包是只读的;

Document(文件,文档):使用最多,用来保存所有的数据iTunes会自动备份和恢复;

Library/Caches:缓存文件夹  缓存数据

Library/Prefernces:偏好设置用于保存有用的少量数据 iTunes会自动备份和恢复

tmp:临时文件夹,此文件夹下的数据 不定时的可以被销毁

//得到工程中的完整路径:

NSString *path=[[NSBundlemainBundle]pathForResource:@"face/001"    ofType:@"gif"];

 NSLog(@"path:%@",path);

 

a.得到app的路径

NSString*appPath=[[NSBundle mainBundle]resourcePath]//resource 资源

 

b.得到Document文档的路径

方法一:

NSString*home=NSHomeDirectory();

NSString*doicumentPath=[home stringByAppendingComponent:@"Dovument"]

 

方法二:

documentsPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];

 

C.获取临时文件夹的路径:

NSString*tempPath=NSTemporaryDirctory();

d. 获取caches的路径

NSStringcachesPath= NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)[0];

 

 

3 配置文件

step1:创建用户配置文件  会自动创建一个plist文件在library里的prefernces里面

NSUserDefaults*user=[NSUserDefaults StandardUserDefaults];

step2:先取 如果不存在的时候默认是0

intCount=[user integerForKey:@“Count”];

step3:把取出来的Count加一后存放到user中

[user  setImteger:++CountforKey:@"runCount"];

step4:设置同步

[usersynchronize];

[DemoPlistChat编写一个聊天是的表情按钮 实现点击什么按钮显示按钮的相对应的信息]

分析:设置plist文件  是一个数组  数字中的每一项都是一个dictionary  dictionary中包含表情的编号表情对象的文字描述 和表情图片

实现步骤:

step1:得到plist文件的路径 并把plist转换为数组

step2:遍历数字  得到的每一项都用字典接受

           创建UIButton根据规律创建button的位置 并给button的tag赋值

          得到字典中某个键所对应的名称NSString*faceName=[dic objectForKey:@"png"];

        为button设置图片

          把所有的button放入scrollview中

         设置scrollview的contentsize 行数等于 CGFloat line=self.array.count%8==0?self.array.count/8*40:self.array.count/8+1;

         为button添加方法

step3:在方法中 实现得到数组中的所点击的button对应的dictionary

          根据字典的某个标志得到所需要的信息

          已追加的方式写入倒文本框中

//获得plist的路径 并转换为数组

    self.array=[NSArrayarrayWithContentsOfFile:@"/Users/tarena6/Desktop/test/第三个月/Day04/DemoPlistChat/DemoPlistChat/face/emoticons.plist"];

    //遍历数组  得到的每个都是dictionary类型

    for (int i=0; i<self.array.count; i++) {

        NSDictionary *dic=self.array[i];

        UIButton *btn=[[UIButtonalloc]initWithFrame:CGRectMake(i%8*40, i/8*40, 40, 40)];

        btn.tag=i;

        //得到字典中的某个键所对应的名称

        NSString *faceName=[dicobjectForKey:@"png"];

        [btn setImage:[UIImageimageNamed:faceName] forState:UIControlStateNormal];

        [self.MySV addSubview:btn];

        CGFloat line=self.array.count%8==0?self.array.count/8*40:self.array.count/8+1;

        [self.MySV setContentSize:CGSizeMake(0,line)];

        [btn addTarget:selfaction:@selector(clock:) forControlEvents:UIControlEventTouchUpInside];

    }

-(void)clock:(UIButton*)btn{

   NSDictionary *dict=self.array[btn.tag];

    NSString *name=[dictobjectForKey:@"chs"];

    //以追加的方式向textfile里面添加内容

    self.showTF.text=[self.showTF.textstringByAppendingString:name];

 

}

4 归档

把对象和data之间相互转换,只有实现了NSCoding的协议对象才能进行归档

 

归档的方式一:

NSArray *name=@[@"张三",@"李四",@"王五",@"赵六"];

step1:准备一个可变的Data

NSMuatableData*data=[NSMutableData data];

step2:创建归档对象

NSKeyedArchiver*arch=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

step3:编码

[archencodeObject:names forKey:@“names ”];

//可以向一个data数据中添加多个对象

step4:完成编码

[archfinishEncoding]

[datawriteToFile:@"User/tarena/Desktop/name.arch  atomically:YES"];

归档生成的文件不能直接使用系统提供的或者其他应用程序打开

************反归档

step1:拿到归档的文件 可以是网上的数据  也可以是本地保存的数据

NSData*data=[NSData dataWithContentsOfFile:@"/Users/Gjh/name.arch"];

step2:创建反归档对象

NSKeyedUnarchiver*unArch = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

step3:解码

NSArray *names= [unArch decodeObjectForKey:@"names"];

 

归档方式二:

//直接拿到数据进行归档

NSData*data=[NSKeyedArchiver archivedDataWithRootObject:self.view.subviews];

//设置归档保存的位置   

[datawriteToFile:@"/Users/tarena6/Desktop/Views/subView_4"atomically:YES];

********反归档

//拿到归档的文件

NSString*path=@"/Users/tarena6/Desktop/Views/subView_0";

//将归档的文件转换为NSData

NSData*data=[NSData dataWithContentsOfFile:path];

//将创建的data对象解码为NSArray

NSArray*subViews=[NSKeyedUnarchiver unarchiveObjectWithData:data];

 

 

IOS之plist 沙箱 归档 配置

标签:

原文地址:http://www.cnblogs.com/katydid/p/4346046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!