GET-POST请求,数据的持久化
2015-08-19 18:59
351 查看
- (IBAction)synGET:(id)sender {
NSLog(@"GET同步请求");
NSString *strURL=@"http://api.map.baidu.com/place/v2/search?query=银行®ion=大连&output=json&ak=6E823f587c95f0148c19993539b99295";
//一个正常的URL地址是不允许有中文的,只能数字,有6个英文字母的大小写,和一些特殊的符号比如&,%等,如果遇到带中文的URL,首先把它进行编码.
NSString *strEncode=[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",strEncode);
//接下来.URL符合要求之后,就开始进行网络请求,网络请求分为三步
//1.根据已经编好的URL,创建一个NSURL
NSURL *url=[NSURL URLWithString:strEncode];
//2.发送一个请求
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
//3.妇女会我们要的一个数据,一个NSData对象
//第一个参数:刚刚创建的请求
//第二个参数:返回一个响应
//第三个参数:错误信息
NSURLResponse *response=nil;
NSError *error=nil;
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//对返回回来的数据,data进行json解析
//把所有的银名打印出来
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSMutableArray *arr=[NSMutableArray array];
arr=dic[@"results"];
for (NSMutableDictionary *dic in arr) {
NSLog(@"%@",dic[@"name"]);}}
- (IBAction)synPOST:(id)sender {
NSLog(@"POST请求");
NSString *strURL=@"http://ipadbjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
NSURL *uil=[NSURL URLWithString:strURL];
NSMutableURLRequest *reques=[NSMutableURLRequest requestWithURL:uil];
//接下来是POST请求独有的部分
//把请求的方式首先设置成POST请求,默认是GET
[reques setHTTPMethod:@"POST"];
//接下来需要把请求的内容放到request的body中
NSString*bodyStr=
@"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
//需要把请求部分的字符串变成NSData类型的对象
NSData *bodyData=[bodyStr dataUsingEncoding:NSUTF8StringEncoding];
//把bodyData放到request中
[reques setHTTPBody:bodyData];
NSData *data=[NSURLConnection sendSynchronousRequest:reques returningResponse:nil error:nil];
//json
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil ];
NSLog(@"%@",dic);
NSMutableArray *arr=[NSMutableArray array];
arr=dic[@"news"];
for (NSMutableDictionary *dic in arr) {
NSLog(@"%@",dic[@"cname"]);
}}
-(IBAction)asynGET:(id)sender {
NSLog(@"GET异步请求");
NSString *strURL=@"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
NSURL *url=[NSURL URLWithString:strURL];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
//前两步和之前还是一模一样,第三步出现变化,通过代理的方式进行异步操作
[NSURLConnection connectionWithRequest:request delegate:self];}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
//只要接受到服务器放回的相应信息,就会走这个方法,我们在这个方法里需要接受数据的容器data进行初始化设置
self.data=[NSMutableData data];}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
//只要返回数据就会走这个协议方法
//append是累加的意思
[self.data appendData:data];}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
//到这,整个请求已经结束,需要把返回的data对imageView的image进行赋值
self.imageView.image=[UIImage imageWithData:self.data];}
#warning 同步和异步GET请求在步骤上完全相同,只是在第三步同步使用的是sendSyn的方法,异步使用的是代理的方法,异步是基于同步进行操作
-(IBAction)asynPOST:(id)sender {
NSLog(@"POST异步");
NSString *strURl=@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
//1.创建NSURL
NSURL *url=[NSURL URLWithString:strURl];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *bodyData=@"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
NSData *data=[bodyData dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//网络请求在子线程里进行请求,请求下来的数据需要通过控件作为载体体现出来,需要把数据在主线程里显示,第二个参数就是指定把数据返回到那个线程
mainQueue是主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {//参数的data就是我们请求下来的数据,接下来数据的解析就在block中进行操作
//在block中进行josn解析
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//NSLog(@"%@",dic);
NSMutableArray *arr=[NSMutableArray array];
arr=dic[@"news"];
for (NSMutableDictionary *dic in arr) {
NSLog(@"%@",dic[@"summary"]);
}}];
}
-(IBAction)blockGET:(id)sender {
NSLog(@"GET异步通过block的方式");
NSString *str=@"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
NSURL *url=[NSURL URLWithString:str];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {self.imageView.image=[UIImage imageWithData:data];
}];
}
#warning 总结一下网络请求的步骤:1.根据网址的字符串,创建一个NSURL对象 2.根据这个url对象,创建一个请求,3,发送请求,然后获取请求对象,同步和异步的区别就是在请求的方法选用有差别,其他都一样
//#warning POST就是比GET请求多一个,需要给request添加一个body
///////////////////////////////////数据的持久化////////////////////////////////////////
//苹果手机为了保证数据上的绝对安全设计了沙盒文件,每一个应用程序都配备了自己的沙盒文件,每一次运行,文件夹的名字都会变成一个没有任何规律的字符串
//第一个参数:当前要前往哪一个文件夹,前往documents文件用NSDocumentDirectory,64行那个,还可以前往caches文件夹,对应68行.
//第二个参数:访问的文件夹类型.
//第三个参数:绝对路径(YES),相对路径(NO).
//绝对路径是给系统来使用,系统可以根据当前的路径找到文件夹,我们在操作文件的时候都是用绝对路径.
//相对路径只是会把要前往的文件夹显示,其他部分都是~,告诉程序员要去那个文件夹.
NSArray *sandbox=NSSearchPathForDirectoriesInDomains(NSCachesDirectory , NSUserDomainMask, YES);
NSLog(@"%@",sandbox[0]);
//沙盒里一共有三个文件
//1.是Documents文件:主要是用来存储用户的想要存储的一些信息,比如收藏的信息或者自己设置的一些内容,所以我们做收藏功能就是往这个文件夹里面写文件.
//2.library文件夹是方便程序开发者使用的,主要操作它里面的两个文件夹,caches和Preferences
//caches:用来保存缓存文件,SDWebImage会把图片加到缓存文件中,所以清除缓存功能就是把这个文件夹删除
//Preferences一般来保存程序员设置的信息,比如NSUserDefaults就会把数据保存在这个文件夹里
//3.tmp文件:一般存放临时内容
//之前在沙盒里还有一个.app文件,在新的版本里已经被移走了
//把简单对象写入到本地,简单对象指的是NSString,NSArray等
//1.先通过数组获取沙盒路径
NSArray *sendBox= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//从数组里获取沙盒路径
NSString *sendBoxPath=sendBox[0];
//要给写入的文件拼接一个路径,拼接方式有两种
NSString *documentPath=[sendBoxPath stringByAppendingString:@"/小王子.txt"];
NSLog(@"%@",documentPath);
NSString *documentPath1=[sendBoxPath stringByAppendingPathComponent:@"小王子.txt"];
NSLog(@"%@",documentPath1);
//将字符串写入本地
NSString *str=@"隔壁老顾总耍剑,金丝大家";
//第一个参数:文件要保存的路径
//第二个参数:对文件进行保护,YES
//第三个参数:编码
//第四个参数:错误信息
[str writeToFile:documentPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
//如果路径下有对应文件,则会把原来文件覆盖,如果没有则创建一个新文件
/把沙盒文件读出来
NSString *temStr=[NSString stringWithContentsOfFile:documentPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",temStr);
//把数组写入到本地
NSArray *arr=@[@"1",@"2",@"3",@"4",@"5"];
//通过数组获取沙盒地址NSDocumentDirectory
NSArray *sendBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//用字符串保存沙盒路径
NSString *sendBoxPath=sendBox[0];
//给要写入的文件拼接路径
NSString *str=[sendBoxPath stringByAppendingString:@"/jj.txt"];
//把数组写入到本地
[arr writeToFile:str atomically:YES];
NSLog(@"%@",str);
NSArray *a=[NSArray arrayWithContentsOfFile:str];
NSLog(@"%@",a);
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"1",@"2",@"3",@"4" ,nil];
NSArray *sendBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sendPath=sendBox[0];
NSString *str=[sendPath stringByAppendingString:@"/ii.txt"];
[dic writeToFile:str atomically:YES];
NSLog(@"%@",str);
NSDictionary *d=[NSDictionary dictionaryWithContentsOfFile:str];
NSLog(@"%@",d);
//复杂对象写入到本地,主要指我们自己创建的对象写入到本地,
Student *stu=[Student studentWithname:@"小王子" sex:@"男" age:23 hobby:@"呵呵"];
//1.通过数组获取沙盒路径
NSArray *sendBox=NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sendBoxstr=sendBox[0];
//3.拼接文件夹路径,这个文件的扩展名是任意的
NSString *str=[sendBoxstr stringByAppendingString:@"/复杂.plist"];
//对对象进行归档操作
//第一个参数:要实现归档的对象
//第二个参数:路经
NSMutableArray *arr=[NSMutableArray array];
[arr addObject:stu];
[NSKeyedArchiver archiveRootObject:arr toFile:str];
NSLog(@"%@",str);
//进行反归档操作
Student *newStu=[NSKeyedUnarchiver unarchiveObjectWithFile:str];
NSLog(@"%@",newStu.name);
NSMutableArray *arr1=[NSKeyedUnarchiver unarchiveObjectWithFile:str];
NSLog(@"%@",arr1);
#warning 总结:数据持久化的步骤
1.指定前往哪一个文件夹
2.用字符串接受路径
3.拼接文件路径
4.归档(写入本地)
5.反归档(从本地读出文件)
注:如果是复杂对象归档,要签订NScoding方法,并且实现两个协议方法,放在数组里的复杂对象归档也要签协议.
//NSUserDefaults一般存在的是小的数据,比如字符串等,它用法和字典类似
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:@"123456" forKey:@"passWord"];
NSArray *sendBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@",sendBox);
NSLog(@"%@",[defaults objectForKey:@"passWord"]);
//通过文件管理者对文件夹进行操作
NSArray *arr=NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sandBoxstr=arr[0];
//创建一个文件管理者
NSFileManager *manager=[NSFileManager defaultManager];
//给要创建的文件夹拼接一个路径
NSString *str=[sandBoxstr stringByAppendingString:@"/guyu"];
//文件夹的名不需要有任何扩展名
//通过manager进行文件的创建
[manager createDirectoryAtPath:str withIntermediateDirectories:YES attributes:nil error:nil];
NSLog(@"%@",str);
//向新建文件夹内写入一个字符串
NSString *r=@"qqqqq";
NSString *re=[str stringByAppendingString:@"/guyu.txt"];
[r writeToFile:re atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",re);
//移除文件夹
manager removeItemAtPath:str error:nil];
//清除缓存
NSArray *cancle=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *can=cancle[0];
[manager removeItemAtPath:can error:nil];
NSLog(@"GET同步请求");
NSString *strURL=@"http://api.map.baidu.com/place/v2/search?query=银行®ion=大连&output=json&ak=6E823f587c95f0148c19993539b99295";
//一个正常的URL地址是不允许有中文的,只能数字,有6个英文字母的大小写,和一些特殊的符号比如&,%等,如果遇到带中文的URL,首先把它进行编码.
NSString *strEncode=[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",strEncode);
//接下来.URL符合要求之后,就开始进行网络请求,网络请求分为三步
//1.根据已经编好的URL,创建一个NSURL
NSURL *url=[NSURL URLWithString:strEncode];
//2.发送一个请求
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
//3.妇女会我们要的一个数据,一个NSData对象
//第一个参数:刚刚创建的请求
//第二个参数:返回一个响应
//第三个参数:错误信息
NSURLResponse *response=nil;
NSError *error=nil;
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//对返回回来的数据,data进行json解析
//把所有的银名打印出来
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSMutableArray *arr=[NSMutableArray array];
arr=dic[@"results"];
for (NSMutableDictionary *dic in arr) {
NSLog(@"%@",dic[@"name"]);}}
- (IBAction)synPOST:(id)sender {
NSLog(@"POST请求");
NSString *strURL=@"http://ipadbjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
NSURL *uil=[NSURL URLWithString:strURL];
NSMutableURLRequest *reques=[NSMutableURLRequest requestWithURL:uil];
//接下来是POST请求独有的部分
//把请求的方式首先设置成POST请求,默认是GET
[reques setHTTPMethod:@"POST"];
//接下来需要把请求的内容放到request的body中
NSString*bodyStr=
@"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
//需要把请求部分的字符串变成NSData类型的对象
NSData *bodyData=[bodyStr dataUsingEncoding:NSUTF8StringEncoding];
//把bodyData放到request中
[reques setHTTPBody:bodyData];
NSData *data=[NSURLConnection sendSynchronousRequest:reques returningResponse:nil error:nil];
//json
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil ];
NSLog(@"%@",dic);
NSMutableArray *arr=[NSMutableArray array];
arr=dic[@"news"];
for (NSMutableDictionary *dic in arr) {
NSLog(@"%@",dic[@"cname"]);
}}
-(IBAction)asynGET:(id)sender {
NSLog(@"GET异步请求");
NSString *strURL=@"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
NSURL *url=[NSURL URLWithString:strURL];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
//前两步和之前还是一模一样,第三步出现变化,通过代理的方式进行异步操作
[NSURLConnection connectionWithRequest:request delegate:self];}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
//只要接受到服务器放回的相应信息,就会走这个方法,我们在这个方法里需要接受数据的容器data进行初始化设置
self.data=[NSMutableData data];}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
//只要返回数据就会走这个协议方法
//append是累加的意思
[self.data appendData:data];}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
//到这,整个请求已经结束,需要把返回的data对imageView的image进行赋值
self.imageView.image=[UIImage imageWithData:self.data];}
#warning 同步和异步GET请求在步骤上完全相同,只是在第三步同步使用的是sendSyn的方法,异步使用的是代理的方法,异步是基于同步进行操作
-(IBAction)asynPOST:(id)sender {
NSLog(@"POST异步");
NSString *strURl=@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
//1.创建NSURL
NSURL *url=[NSURL URLWithString:strURl];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *bodyData=@"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
NSData *data=[bodyData dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//网络请求在子线程里进行请求,请求下来的数据需要通过控件作为载体体现出来,需要把数据在主线程里显示,第二个参数就是指定把数据返回到那个线程
mainQueue是主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {//参数的data就是我们请求下来的数据,接下来数据的解析就在block中进行操作
//在block中进行josn解析
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//NSLog(@"%@",dic);
NSMutableArray *arr=[NSMutableArray array];
arr=dic[@"news"];
for (NSMutableDictionary *dic in arr) {
NSLog(@"%@",dic[@"summary"]);
}}];
}
-(IBAction)blockGET:(id)sender {
NSLog(@"GET异步通过block的方式");
NSString *str=@"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
NSURL *url=[NSURL URLWithString:str];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {self.imageView.image=[UIImage imageWithData:data];
}];
}
#warning 总结一下网络请求的步骤:1.根据网址的字符串,创建一个NSURL对象 2.根据这个url对象,创建一个请求,3,发送请求,然后获取请求对象,同步和异步的区别就是在请求的方法选用有差别,其他都一样
//#warning POST就是比GET请求多一个,需要给request添加一个body
///////////////////////////////////数据的持久化////////////////////////////////////////
//苹果手机为了保证数据上的绝对安全设计了沙盒文件,每一个应用程序都配备了自己的沙盒文件,每一次运行,文件夹的名字都会变成一个没有任何规律的字符串
//第一个参数:当前要前往哪一个文件夹,前往documents文件用NSDocumentDirectory,64行那个,还可以前往caches文件夹,对应68行.
//第二个参数:访问的文件夹类型.
//第三个参数:绝对路径(YES),相对路径(NO).
//绝对路径是给系统来使用,系统可以根据当前的路径找到文件夹,我们在操作文件的时候都是用绝对路径.
//相对路径只是会把要前往的文件夹显示,其他部分都是~,告诉程序员要去那个文件夹.
NSArray *sandbox=NSSearchPathForDirectoriesInDomains(NSCachesDirectory , NSUserDomainMask, YES);
NSLog(@"%@",sandbox[0]);
//沙盒里一共有三个文件
//1.是Documents文件:主要是用来存储用户的想要存储的一些信息,比如收藏的信息或者自己设置的一些内容,所以我们做收藏功能就是往这个文件夹里面写文件.
//2.library文件夹是方便程序开发者使用的,主要操作它里面的两个文件夹,caches和Preferences
//caches:用来保存缓存文件,SDWebImage会把图片加到缓存文件中,所以清除缓存功能就是把这个文件夹删除
//Preferences一般来保存程序员设置的信息,比如NSUserDefaults就会把数据保存在这个文件夹里
//3.tmp文件:一般存放临时内容
//之前在沙盒里还有一个.app文件,在新的版本里已经被移走了
//把简单对象写入到本地,简单对象指的是NSString,NSArray等
//1.先通过数组获取沙盒路径
NSArray *sendBox= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//从数组里获取沙盒路径
NSString *sendBoxPath=sendBox[0];
//要给写入的文件拼接一个路径,拼接方式有两种
NSString *documentPath=[sendBoxPath stringByAppendingString:@"/小王子.txt"];
NSLog(@"%@",documentPath);
NSString *documentPath1=[sendBoxPath stringByAppendingPathComponent:@"小王子.txt"];
NSLog(@"%@",documentPath1);
//将字符串写入本地
NSString *str=@"隔壁老顾总耍剑,金丝大家";
//第一个参数:文件要保存的路径
//第二个参数:对文件进行保护,YES
//第三个参数:编码
//第四个参数:错误信息
[str writeToFile:documentPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
//如果路径下有对应文件,则会把原来文件覆盖,如果没有则创建一个新文件
/把沙盒文件读出来
NSString *temStr=[NSString stringWithContentsOfFile:documentPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",temStr);
//把数组写入到本地
NSArray *arr=@[@"1",@"2",@"3",@"4",@"5"];
//通过数组获取沙盒地址NSDocumentDirectory
NSArray *sendBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//用字符串保存沙盒路径
NSString *sendBoxPath=sendBox[0];
//给要写入的文件拼接路径
NSString *str=[sendBoxPath stringByAppendingString:@"/jj.txt"];
//把数组写入到本地
[arr writeToFile:str atomically:YES];
NSLog(@"%@",str);
NSArray *a=[NSArray arrayWithContentsOfFile:str];
NSLog(@"%@",a);
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"1",@"2",@"3",@"4" ,nil];
NSArray *sendBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sendPath=sendBox[0];
NSString *str=[sendPath stringByAppendingString:@"/ii.txt"];
[dic writeToFile:str atomically:YES];
NSLog(@"%@",str);
NSDictionary *d=[NSDictionary dictionaryWithContentsOfFile:str];
NSLog(@"%@",d);
//复杂对象写入到本地,主要指我们自己创建的对象写入到本地,
Student *stu=[Student studentWithname:@"小王子" sex:@"男" age:23 hobby:@"呵呵"];
//1.通过数组获取沙盒路径
NSArray *sendBox=NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sendBoxstr=sendBox[0];
//3.拼接文件夹路径,这个文件的扩展名是任意的
NSString *str=[sendBoxstr stringByAppendingString:@"/复杂.plist"];
//对对象进行归档操作
//第一个参数:要实现归档的对象
//第二个参数:路经
NSMutableArray *arr=[NSMutableArray array];
[arr addObject:stu];
[NSKeyedArchiver archiveRootObject:arr toFile:str];
NSLog(@"%@",str);
//进行反归档操作
Student *newStu=[NSKeyedUnarchiver unarchiveObjectWithFile:str];
NSLog(@"%@",newStu.name);
NSMutableArray *arr1=[NSKeyedUnarchiver unarchiveObjectWithFile:str];
NSLog(@"%@",arr1);
#warning 总结:数据持久化的步骤
1.指定前往哪一个文件夹
2.用字符串接受路径
3.拼接文件路径
4.归档(写入本地)
5.反归档(从本地读出文件)
注:如果是复杂对象归档,要签订NScoding方法,并且实现两个协议方法,放在数组里的复杂对象归档也要签协议.
//NSUserDefaults一般存在的是小的数据,比如字符串等,它用法和字典类似
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:@"123456" forKey:@"passWord"];
NSArray *sendBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@",sendBox);
NSLog(@"%@",[defaults objectForKey:@"passWord"]);
//通过文件管理者对文件夹进行操作
NSArray *arr=NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sandBoxstr=arr[0];
//创建一个文件管理者
NSFileManager *manager=[NSFileManager defaultManager];
//给要创建的文件夹拼接一个路径
NSString *str=[sandBoxstr stringByAppendingString:@"/guyu"];
//文件夹的名不需要有任何扩展名
//通过manager进行文件的创建
[manager createDirectoryAtPath:str withIntermediateDirectories:YES attributes:nil error:nil];
NSLog(@"%@",str);
//向新建文件夹内写入一个字符串
NSString *r=@"qqqqq";
NSString *re=[str stringByAppendingString:@"/guyu.txt"];
[r writeToFile:re atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",re);
//移除文件夹
manager removeItemAtPath:str error:nil];
//清除缓存
NSArray *cancle=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *can=cancle[0];
[manager removeItemAtPath:can error:nil];
相关文章推荐
- mysql information_schema
- Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
- 生活感悟
- 题目:删除链表中倒数第n个节点
- 图像处理
- Parallels Desktop如何创建虚拟机模板
- 题目:删除排序链表中的重复元素
- main() 参数:argc 与 argv
- Android笔记(三)为按钮添加事件
- linux下类似Bus Hound的工具
- 字符串常用函数汇总【持续更新中........】
- [LightOJ1370]Bi-shoe and Phi-shoe
- 题目:删除排序数组中的重复数字 II
- Linux 命令行Shell快捷键
- HDU-1875 畅通工程再续(最小生成树[Prim])
- 暗色调,调出紫红色的暗调晨曦照片效果(转)
- ios 点击返回顶部效果的实现,类似单击状态栏效果
- 学习资料备忘录
- 【LeetCode】116. Populating Next Right Pointers in Each Node
- 在 Java 中如何更高效地存储和管理 SQL 语句?