• IOS之plist 沙箱 归档 配置


    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];

     

     

  • 相关阅读:
    Impala 加载Hive的UDF
    在编译器中调试spark程序处理
    转:Kafka 客户端TimeoutException问题之坑
    Apache Kafka系列(五) Kafka Connect及FileConnector示例
    Apache Kafka系列(四) 多线程Consumer方案
    Apache Kafka系列(三) Java API使用
    Apache Kafka系列(二) 命令行工具(CLI)
    ajax异步刷新
    Mybaties下的分页功能的实现
    读取配置文件的方法
  • 原文地址:https://www.cnblogs.com/katydid/p/4346046.html
Copyright © 2020-2023  润新知