如何读取沙盒中的文件,和保存网络资源到沙盒中?
-(NSString *)dataFilePath:(NSString*)fileName
{
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *document=[paths objectAtIndex:0];
return [documentstringByAppendingPathComponent:fileName];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//可以下载图片
[self.datawriteToFile:[selfdataFilePath:@"image.jpg"]atomically:YES];
self.webView.hidden =YES;
//将沙盒中的图片加载到界面中
NSString *path = [selfdataFilePath:@"image.jpg"];
UIImage *imag = [[UIImagealloc]initWithContentsOfFile:path];
UIImageView *img = [[UIImageViewalloc]initWithImage:imag];
CGRect rect = CGRectMake(0,0,320,460);
img.frame = rect;
[self.viewaddSubview:img];
}
进入主题,接下来我要实现三个功能:
1.访问网页
2.从网上加载图片资源到本地
3.发送get请求获取到天气预报的接口,然后保存到本地接着是json解析
功能设计:
1.webView的使用
PageViewController.h:
#import <UIKit/UIKit.h> @interface PageViewController : UIViewController<UIWebViewDelegate> @property (retain, nonatomic) IBOutlet UIWebView *webView; - (IBAction)GoClick:(id)sender; @property (retain, nonatomic) IBOutlet UITextField *txtUrl; - (IBAction)resignBoardClick:(id)sender; @property(retain,nonatomic)NSURL *url; @property(nonatomic,retain)UIAlertView *alert; @end
PageViewController.m:
// // PageViewController.m // 地图+网络 // // Created by 丁小未 on 13-8-27. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // #import "PageViewController.h" @interface PageViewController () @end @implementation PageViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = @"页面"; } return self; } -(void)pageLoad1:(NSURL *)url { NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; } - (void)viewDidLoad { [super viewDidLoad]; self.url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest *request = [NSURLRequest requestWithURL:self.url]; [self pageLoad1:self.url]; } -(void)webViewDidFinishLoad:(UIWebView *)webView { [self.alert dismissWithClickedButtonIndex:0 animated:YES]; } -(void)webViewDidStartLoad:(UIWebView *)webView { self.alert = [[UIAlertView alloc] initWithTitle:@"Loading..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles: nil]; [self.alert show]; UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; aiv.center = CGPointMake(self.alert.bounds.size.width/2, self.alert.bounds.size.height/2); [aiv startAnimating]; [self.alert addSubview:aiv]; } - (void)dealloc { [_webView release]; [_url release]; [_txtUrl release]; [_alert release]; [super dealloc]; } - (IBAction)GoClick:(id)sender { [self.txtUrl resignFirstResponder]; if (self.txtUrl.text != nil) { self.url = [NSURL URLWithString:self.txtUrl.text]; [self pageLoad1:self.url]; } else { self.alert = [[UIAlertView alloc] initWithTitle:@"提醒" message:@"地址不能为空" delegate:self cancelButtonTitle:@"OK"otherButtonTitles: nil]; [self.alert show]; } } - (IBAction)resignBoardClick:(id)sender { [self.txtUrl resignFirstResponder]; } @end
xib:
效果图:
请求网络的加载效果:
请求结束的效果图:
2.根据URL地址请求网络图片并且显示出来
PicViewController.h:
// // PicViewController.h // 地图+网络 // // Created by 丁小未 on 13-8-27. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // #import <UIKit/UIKit.h> @interface PicViewController : UIViewController<UIWebViewDelegate,NSURLConnectionDataDelegate> @property(nonatomic,retain)NSURL *url; @property (retain, nonatomic) IBOutlet UIWebView *webView; @property (retain, nonatomic) NSMutableData * data; @property (retain, nonatomic) NSURLConnection * connection; @end
PicViewController.m:
// // PicViewController.m // 地图+网络 // // Created by 丁小未 on 13-8-27. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // #import "PicViewController.h" @interface PicViewController () @end @implementation PicViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; NSString *urlString =@"http://e.hiphotos.baidu.com/album/w%3D2048/sign=76d548844afbfbeddc59317f4cc8f636/267f9e2f07082838334a05afb999a9014d08f1c2.jpg"; self.url = [NSURL URLWithString:urlString]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:self.url]; [self.webView loadRequest:request]; //step3:创建链接 self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if(self.connection) { NSLog(@"创建链接成功"); }else{ NSLog(@"创建链接失败"); } [urlString release]; } //获取数据 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSMutableData * data = [[NSMutableData alloc] init]; self.data = data; [data release]; } //不断的获取数据 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //接受返回数据,这个方法可能会被调用多次,因此将多次返回数据加起来 NSInteger datalength = [data length]; NSLog(@"返回数据量:%d",datalength); [self.data appendData:data]; } //获取文件地址 -(NSString *)dataFilePath:(NSString*)fileName { NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *document=[paths objectAtIndex:0]; return [document stringByAppendingPathComponent:fileName]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { //可以下载图片 [self.data writeToFile:[self dataFilePath:@"image.jpg"] atomically:YES]; self.webView.hidden = YES; //将沙盒中的图片加载到界面中 NSString *path = [self dataFilePath:@"image.jpg"]; UIImage *imag = [[UIImage alloc] initWithContentsOfFile:path]; UIImageView *img = [[UIImageView alloc] initWithImage:imag]; CGRect rect = CGRectMake(0, 0, 320,460); img.frame = rect; [self.view addSubview:img]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"连接失败"); } - (void)dealloc { [_webView release]; [super dealloc]; } @end
xib:
请求后的效果图:
3.请求天气预报的接口然后json解析请求后的数据并且保存到本地显示出来
WeatherViewController.h:
// // WeatherViewController.h // 地图+网络 // // Created by 丁小未 on 13-8-27. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // #import <UIKit/UIKit.h> @interface WeatherViewController : UIViewController<UIWebViewDelegate,NSURLConnectionDataDelegate> @property (retain, nonatomic) IBOutlet UITextField *txtCity; @property (retain, nonatomic) IBOutlet UITextField *txtMaxTem; @property (retain, nonatomic) IBOutlet UITextField *txtMinTem; @property (retain, nonatomic) IBOutlet UITextField *txtTempreture; @property(retain,nonatomic)NSMutableData *data; @property (retain, nonatomic) IBOutlet UILabel *label; @property(retain,nonatomic)NSURLConnection *connection; - (IBAction)resignBoard:(id)sender; @end
WeatherViewController.m:
// // WeatherViewController.m // 地图+网络 // // Created by 丁小未 on 13-8-27. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // #import "WeatherViewController.h" @interface WeatherViewController () @end @implementation WeatherViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.label.text = @"正在请求数据"; NSString *urlString = @"http://www.weather.com.cn/data/cityinfo/101020100.html"; NSURL *url = [NSURL URLWithString:urlString]; //实例化一个request NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; //创建连接 self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if (self.connection) { NSLog(@"创建连接成功"); } else { NSLog(@"创建连接失败"); } [url release]; [urlString release]; } //获取数据 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { //接受一个服务端回话,再次一般初始化接受数据的对象 //NSLog(@"返回数据类型%@",[response ]); //NSLog(@"返回数据编码%@",[response text]); NSMutableData * data = [[NSMutableData alloc] init]; self.data = data; [data release]; } //不断的获取数据 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //接受返回数据,这个方法可能会被调用多次,因此将多次返回数据加起来 NSInteger datalength = [data length]; NSLog(@"返回数据量:%d",datalength); [self.data appendData:data]; } //获取文件地址 -(NSString *)dataFilePath:(NSString*)fileName { NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *document=[paths objectAtIndex:0]; return [document stringByAppendingPathComponent:fileName]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { //连接结束 NSLog(@"%d",[self.data length]); self.label.text =@"天气预报"; //可以下载图片 //[self.data writeToFile:[self dataFilePath:@"image.jpg"] atomically:YES]; // NSString * mystr = [[NSStringalloc] initWithData:self.dataencoding:NSUTF8StringEncoding]; // // [mystr writeToFile:[selfdataFilePath:@"百度图片—全球最大中文图片库.html"] atomically:YES encoding:NSUTF8StringEncoding error:nil]; // // NSLog(@"最后的结果%@",mystr); // // [mystr release]; NSDictionary *weather = [NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",weather); [weather writeToFile:[self dataFilePath:@"weather.plist"] atomically:YES]; NSLog(@"%@",[weather allKeys]); NSDictionary *dic = [weather objectForKey:@"weatherinfo"]; NSLog(@"%@",dic); self.txtCity.text = [dic objectForKey:@"city"]; self.txtTempreture.text = [dic objectForKey:@"weather"]; self.txtMaxTem.text = [dic objectForKey:@"temp2"]; self.txtMinTem.text = [dic objectForKey:@"temp1"]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { self.label.text =@"连接失败"; } - (void)dealloc { [_txtCity release]; [_txtMaxTem release]; [_txtMinTem release]; [_txtTempreture release]; [_label release]; [super dealloc]; } - (IBAction)resignBoard:(id)sender { [self.txtMaxTem resignFirstResponder]; [self.txtMinTem resignFirstResponder]; [self.txtCity resignFirstResponder]; [self.txtTempreture resignFirstResponder]; } @end