1. 封装一个请求的类 继承于NSMutableURLRequest
2. 封装一个解析数据的类
1.请求类
#import <Foundation/Foundation.h>
typedef void(^CharlesRequestBlock)(NSData *);
@interface CharlesRequest : NSMutableURLRequest
@property (nonatomic,strong) CharlesRequestBlock myBlock;
+ (id)charlesRequest;
- (void)startAsync;
@end
#import "CharlesRequest.h"
@implementation CharlesRequest {
NSMutableData *_data;
NSURLConnection *_connection;
}
+ (id)charlesRequest {
return [[self alloc] init];
}
- (void)startAsync {
// 创建请求连接
// _connection = [NSURLConnection connectionWithRequest:self delegate:self];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:self queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (self.myBlock) {
self.myBlock(data);
}
}];
// _connection = [[NSURLConnection alloc] initWithRequest:se lf delegate:self];
// [_connection start];
/*
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:self queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%@",[NSThread currentThread]);
if (self.myBlock) {
self.myBlock(data);
}
}];
*/
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
_data = [NSMutableData data];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"%@",[NSThread currentThread]);
[_data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (self.myBlock) {
self.myBlock(_data);
}
}
2. 数据类
#import <Foundation/Foundation.h>
typedef void(^CharlesDataBlock)(id result);
@interface CharlesData : NSObject
+ (void)charlesDataWithParams:(NSDictionary *)params
urlString:(NSString *)urlString
block:(CharlesDataBlock)block;
@end
@implementation CharlesData
+ (void)charlesDataWithParams:(NSDictionary *)params
urlString:(NSString *)urlString
block:(CharlesDataBlock)block {
NSString *citycode = [params objectForKey:@"citycode"];
urlString = [urlString stringByAppendingFormat:@"%@.html",citycode];
CharlesRequest *request = [CharlesRequest charlesRequest];
// URL
[request setURL:[NSURL URLWithString:urlString]];
// 请求方式
[request setHTTPMethod:@"GET"];
// 延时时间
[request setTimeoutInterval:60];
request.myBlock = ^(NSData *data) {
// 解析结果
id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
// 返回
block(result);
};
// 开始请求
[request startAsync];
}
@end
// 得到解析完成的数据,开始操作等。
- (void)getData {
NSDictionary *params = @{@"citycode":@"101010300"};
[CharlesData charlesDataWithParams:params
urlString:BASE_URL
block:^(id result) {
NSDictionary *weatherDic = [result objectForKey:@"weatherinfo"];
[_weatherView.dataArray addObject:weatherDic];
[_weatherView refresh];
}];
}
封装NSURLConnection请求
最新推荐文章于 2021-02-12 12:17:39 发布