plist文件、NSUserDefault 对文件举办仓储的类、json格式解析

==========================

文本操作

==========================

Δ一 .plist文件

.plist文件是一个质量字典数组的一个文书;

.plist文件可以用来储存:字典、数组、字符串等目的数据,可以混搭存储

 

【注】iOS开发中,plist文件一般用于app的安插信息

【注】ios开发工程中,允许多少个plist文件共存。

【注】plist文件用来囤积小数据量的数量

优点:可视化以及可编辑性万分便利

plist文件的操作

         // 例如

        NSString* str = @”我是\”美国人\”\n,我爱\”美国\””;

        NSLog(@”%@”,str);

 1.创建plist文件

        NSMutableDictionary* dic = [[NSMutableDictionary
alloc]init];

 

        [dic setObject: @”张三” forKey: @”name”];

        [dic setObject: @”李四” forKey: @”name1″];

        [dic  setObject: @”王二” forKey: @”name2″];

        

        //【注】假若key相同,数据会被冲掉

        [dic setObject: @”zhangsan” forKey: @”name”];

        

        // 把数据写入文件

        //【了解】atomically

        // atomically:参数意思,原子操作

        //
借使atomically的参数是yes,程序会把数据先备份一下,等任何写入到了缓存中再几遍性写入文件

        // 如果atomically的参数是no,程序会一直把数据写入缓存

        [dic writeToFile:Path atomically:YES];

2.成立一种多键值的plist文件

        

        NSMutableDictionary* plugin1 = [[NSMutableDictionary
alloc]init];

        [plugin1 setObject: @”张三1″ forKey: @”name1″];

        [plugin1 setObject: @”李四” forKey: @”name2″];

        

        NSMutableDictionary* plugin2 = [[NSMutableDictionary
alloc]init];

        

        [plugin2 setObject: @”王二” forKey: @”name1″];

        [plugin2 setObject: @”赵五” forKey: @”name2″];

       

        NSMutableDictionary* listDic = [[NSMutableDictionary
alloc]init];

        [listDic setObject:plugin1 forKey: @”初中一班”];

        [listDic setObject:plugin2 forKey: @”初中二班”];

        

        [listDic setObject: @”一哥” forKey: @”name”];

        

        [listDic writeToFile:Path atomically:YES];

        

3.对某一个质量举办修改

        //∆∆∆∆首先应该先读取当前plist文件,读出装有数据

        // 读取指定目录下的文本内容

        NSMutableDictionary* appList = [[NSMutableDictionary
alloc]initWithContentsOfFile:Path];

        [appList setObject: @”二哥” forKey: @”name”];     

        NSMutableDictionary* chu1 = [appList objectForKey:
@”初中一班”];

        NSString* name1 = [chu1 objectForKey: @”name1″]; 

        [[appList objectForKey: @”初中一班”] objectForKey:
@”name1″];    

        //
通过取出的始末,重新组合一个新的内容,把新的情节数据再度存入plist中

        [chu1 setObject:@”qianqian” forKey: @”name1″];

        [appList setObject:chu1 forKey: @”初中一班”]; 

        [appList writeToFile:Path atomically:YES];

 

【总结】

1.plist文件操作实际就是一个根目录是字典,内部数据种种嵌套操作。

2.只要想要修改plist中的某个字段内容,一层一层去找,找到后一层一层封装回来,重新写入文件。(文件的遮盖进度)

3.plist不容许出现key值重名,假若重名,会把前边的名称下的值给冲掉。

 

二.NSUserDefault 对文本进行仓储的类

  1. NSUserDefault是一个本地数据存储类,可以储存小数据量的音讯。

  2. NSUserDefault 在iOS中常用来存储用户的个人音讯,以及登陆注册新闻。

 

【注】到如今甘休,大家所学的存档、写文件、NSUserDefault都是储存小数据量音讯的类,他们能够储存大数据量可是会出现品质难题。存储大数据量音信用【数据库】

【数据库】

1.SQlite
底部的多少,必要团结手动去成立数据库文件(db),并且须要手动去书写sqlite
语句;

2.【core
data】是苹果集团提供的一种数据库存储、查询、修改、删除等操作一种缓解方案;core
data数据库其实就是一个对sqlit3举办包装的类库。

3.第三方数据库。 

Δ【学习NSUserDefault】

   // userDefault Demo

        // NSUserDefaults 是一个单例类,调用单例方法

        NSUserDefaults* defaul = [NSUserDefaults
standardUserDefaults];

        

        // 设置key和value

        [defaul setObject: @”15588605664″ forKey: @”userName”]; 

        [defaul setObject: @”123456″ forKey: @”password”];

 

        NSArray* classInfo = @[@”初中一班”, @”66个同学”,
@”平均成绩99.98″, @{@”key”:@”value”}];

        [defaul setObject:classInfo forKey: @”clss_Info”]; 

 

       [defaul setObject: @”1″ forKey: @”status”];

        [defaul setBool:YES forKey: @”status”];

        [defaul setInteger:1 forKey: @”int”];

        [defaul setObject:[NSNumber numberWithBool:YES] forKey:
@”status1″];

        [defaul setFloat:0.15 forKey: @”float”];

        

        //  
把刚刚设置的情节存储到程序给NSUserDefaults所分配的半空粤语件中

        //  
系统会把NSUserDefaults存储的文书都停放app的一个指定的目录,其实这几个目录就是在根目录的library目录下一个新的目录下

        // ∆∆∆∆[注]synchronize 一定要写那些办法,能够保险数量万无一失,假如不写那一个点子,可能会存在数量没有保存成功的场合,例如在多线程中开展数据保存;

        [defaul synchronize];

        // =================================

        // 读取文件的不二法门

        

        NSString* userName = [defaul objectForKey: @”userName”];

        NSString* pwd = [defaul objectForKey: @”password”];

        //
只如若牵扯到key和value的,那么存储的时候key怎么写,取的时候,key必须怎么写

        //
只即使牵扯到key和value的,那么存储的key假使一样,肯定会时有暴发覆盖

        NSArray* ClassAllInfo = [defaul objectForKey: @”clss_Info”];

        

        BOOL isok = [defaul objectForKey: @”status”];

        

        float f1 = [defaul floatForKey: @”float”];

        NSInteger i = [defaul integerForKey: @”int”];

        BOOL b = [defaul boolForKey: @”status”];

        

        NSLog(@”用户的登陆消息是:\n%@\n%@”, userName, pwd);

        NSLog(@”%@”,ClassAllInfo);

【注】NSUserDefault
可以储存的数据类型有:NSNumber(NSInterger、flost、double),NSDictionary,NSArray、Bool,NSString那么些数据类型

 

Δ.【扩大知识— c语言 转义字符】

转义字符就是用来缓解程序中的一些特殊符号导致编码出错的题材。比如:

【注】对要进行转义的字符每个前边都要写
\

1.‘

2.“

  1. 回车

4.等等分外多

 

【扩展】

1.编程汉语件的命名最好不要有中文、空格、特殊符号(因为计算机会对普通话或者空格或者特殊符号进行转义)

2.文件和内存数据里面的更换关系

 

cpu(统计机处理多少大脑)所有的数码都是比照cpu的通令去调度执行

 

本土文件——>内存           (读的经过)

内存      ——>本地文件     (写的进度)

【注】代码中定义的变量或者目的变量,那些变量的情节都是在内存中蕴藏运算。即使想把部分有效的音信永久保存,就必要把音讯保存到文件中。

 

(1).内存中的数据,都是有些临时数据,当电脑爆发意外情状(断电),内存中的数据都会没有;

(2).把内存中的输入写入到文件中,就足以永远保存,只要文件没有被删除。

 

三.json格式解析

1.json

2.xml

【相比】xml格式出现的比json格式早,xml就是表单(表格)(<body>name</body>),xml最致命的瑕疵就是可阅读性不高,导致程序员解析比较麻烦。xml优点是利用到大数据量。不过,随着活动端的兴起,json那种格式也初步流行。逐步成为ios平台和安卓平台app端获取数据一种格式。json格式优点:格式清晰,应用于小数据量的收获。

 // 例如

#import <Foundation/Foundation.h>

#import “MyModel.h”

#import “UserModel.h”

 

#define PATH @”http://m2.qiushibaike.com/article/list/latest?page=1&count=30&rqcnt=21&r=a1ef5f561429944164282

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        // 协议很各个:http  ftp  mail  file socket xmpp

        // url格式:  商事://域名(ip地址):端口/路径
?参数列表(以&符间隔每个参数)

         // 将字符串转换成NSURL类型

        NSURL *url = [NSURL URLWithString:PATH];

        // 通过url获取数据

         // NSData *data1 = [[NSData alloc] initWithContentsOfFile:
@””];

        NSData *data = [[NSData alloc] initWithContentsOfURL:url];

        //  NSLog(@”%@”,data);

        

        NSError *error = nil;

        //
NSJSONSerialization苹果系统自带解析,此办法是把data解析成NSDictionary
操作读取可变内容

        NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data options:NSJSONReadingMutableContainers
error:&error];

        if (error) {

            NSLog(@”解析失利”);

            exit(-1);

        }

        

        NSLog(@”%@”,dic);

        NSArray *array = [dic objectForKey:@”items”];

        //  NSLog(@”%@”,array);

        

        // 成立一个可变数组用于存放myModel那一个模型

        NSMutableArray *dataArray = [[NSMutableArray alloc] init];

        

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

            

            MyModel *myModel = [[MyModel alloc] init];

            NSDictionary *dicItem = array[i];

            // 那里的key一定要对应url再次来到来字段值

            myModel.content = [dicItem objectForKey: @”content”];

            myModel.modelId = [dicItem objectForKey: @”id”];         
 

            if (![[dicItem objectForKey:@”user”]
isMemberOfClass:[NSNull class]] ) {

                NSDictionary *userDic = [dicItem objectForKey:
@”user”];

                UserModel *userModel = [[UserModel alloc] init];

                //  NSLog(@”%@”,[userDic objectForKey:
@”avatar_updated_at”]);

                userModel.avatar_updated_at = [userDic objectForKey:
@”avatar_updated_at”];

                userModel.created_at = [userDic objectForKey:
@”created_at”];

                userModel.last_device = [userDic objectForKey:
@”last_device”];

                myModel.user = userModel;

 

            }

            [dataArray addObject:myModel];

        }

        

        //  NSLog(@”可变数组个数:%lu”,dataArray.count);

 

        for (MyModel *myModel in
dataArray) {

           
NSLog(@”content:%@,modelId:%@”, myModel.content,
myModel.modelId);

            UserModel *userModel = myModel.user;

            NSLog(@”更新时间:%@,创制时间:%@,最后装备:           %@”,
 userModel.avatar_updated_at, userModel.created_at,
 userModel.last_device);

        }

    }

    return 0;

}

 

#import <Foundation/Foundation.h>

#import “UserModel.h”

 

@interface MyModel : NSObject

@property (nonatomic,copy) NSString *content;

@property (nonatomic,copy) NSString *modelId;

@property (nonatomic,strong) UserModel *user;

@end

 

#import <Foundation/Foundation.h>

 

@interface UserModel : NSObject

@property (nonatomic,copy) NSString *avatar_updated_at;

@property (nonatomic,copy) NSString *created_at;

@property (nonatomic,copy) NSString *last_device;

 @end

【注】可以应用http://www.bejson.com/    
对json格式举行校验并整治。

网站地图xml地图