IOS之plist 沙箱 归档 配置

Day04

1.Plist文件

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

数组转换为plist:

   step1:创建数组

      NSArray *[email protected][@"老杨",@"老郭",@"小泽"];

   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 *[email protected][@"张三",@"李四",@"王五",@"赵六"];

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*[email protected]"/Users/tarena6/Desktop/Views/subView_0";

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

NSData*data=[NSData dataWithContentsOfFile:path];

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

NSArray*subViews=[NSKeyedUnarchiver unarchiveObjectWithData:data];

 

 

时间: 2024-08-06 15:58:47

IOS之plist 沙箱 归档 配置的相关文章

iOS 中plist文件中配置key值冲突的现象

iOS开发一些特殊的软件需要在项目中配置对应的key值,然而近期在项目中发现一个有意思的现象,苹果官方文档中提供的key值很多,但其实有一些彼此可能有冲突,当你同时配置了彼此冲突的key值,可能会出现一些奇葩的现象,而且不容易发现问题所在,下面我就我遇到的情况和大家分享一下: 因为项目需要,需要配置定位相关的key值,同时需要后台长时间运行,所以在应用中我配置了NSLocationWhenInUseUsageDescription这个定位的key值,为了在使用时获取用户的位置信息:同时我用申请了

iOS开发之数据存储之XML属性列表(plist)归档

1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件(plist文件)中.特别注意的是plist文件不能存储对象. IOS常用文件存储方式有: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCodi

ios开发之Info.plist文件相关配置

前言:在iOS开发中有些情况下需要对Info.plist文件进行配置,以下介绍几种相关配置.以后遇到需要配置的再更新... 开发环境:swift3.0.1,Xcode8.1 一,项目中需要使用第三方字体 1,打开Info.plist文件选中Information Property List选择加号添加一条记录Fonts provided by application(区分大小写) 2,这是一个数组然后在其item中添加已拷贝在本项目中的字体文件名称. 二,项目中需要使用调用手机的图库 添加key

iOS中plist的创建,数据写入与读取

iOS中plist的创建,数据写入与读取功能创建一个test.plist文件,textInput作为输入,displayLabel作为显示,有一个按钮来触发保持程序triggerStorage: -(void)triggerStorage { displayLabel.text = textInput.text; NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)

蜗牛爱课- iOS中plist的创建,数据写入与读取

iOS中plist的创建,数据写入与读取功能创建一个test.plist文件-(void)triggerStorage{    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);    NSString *path=[paths    objectAtIndex:0];      NSString *filename=[path stringByAppendin

IOS读写Plist文件最简单方法

在网上搜了一圈,发现好多代码 = =小白不想看那么多啊,然后就琢磨了下,原来这么easy ! 1 // 获取PLIST路径 2 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"]; 3 // 获取PLIST数据 4 NSMutableDictionary *data = [[NSMutableDictionary alloc] initWith

XMPPFramewok IOS 开发(一)——配置xcode

看了很多教程,有的很旧,有的写的太简单,而实际操作会出现很多编译报错,特此记下来供以后参考. 最好按照步骤一步步导入Framework,每做完一步都要编译一下,发现错误及时改正,否则到最后会很麻烦. 第一步 新建项目chatDemo 第二步 下载最新版XMPPFramewok 地址: https://github.com/robbiehanson/XMPPFramework 第三步 在chatDemo目录下新建目录3rd,在3rd目录下新建XMPP目录,如图所示 第四步 添加CocoaLumbe

iOS开发 plist文件的操作

iOS开发 plist文件操作 浏览:6287 | 更新:2015-02-05 19:57 1 2 3 4 5 分步阅读 iOS开发常用数据存储方式有:NSKeyedArchiver.NSUserDefaults.Write写入方式.SQLite.为了简洁明了的存储和可视化展现数据,以文件形式存储数据是很有必要的.plist文件在iOS开发中属于Write写入方式,可以以Property List列表形式显示,也可以以xml格式显示.对于数据管理是很方便的.掌握使用plist文件数据操作很有必要

Cordova - 使用Cordova开发iOS应用实战1(配置、开发第一个应用)

Cordova - 使用Cordova开发iOS应用实战1(配置.开发第一个应用) 现在比较流行使用 html5 开发移动应用,毕竟只要写一套html页面就可以适配各种移动设备,大大节省了跨平台应用的开发时间.而不像以前一样 Android 要写一套程序,iOS 要写一套,甚至 Windows Phone 还要再写一套程序. 虽然使用H5开发的界面很容易适配各种手机设备,但由于系统的差异,如果要访问原生的设备功能(如摄像头.麦克风等)还是有些不便,或者说不是那么统一.这时我们可以借助 Cordo