如何读取沙盒中的文件,和保存网络资源到沙盒中?
-(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
xib:
请求网络后的效果图: