`
wfkbyni
  • 浏览: 85002 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

iOS中使用block进行网络请求回调

 
阅读更多
转自: http://www.tuicool.com/articles/JFRfmq



//
//  HttpRequest.h
//  UseBlockCallBack
//
//  Created by Michael on 2/13/14.
//  Copyright (c) 2014 EIMS. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void (^FinishBlock)(NSString *dataString);

@interface HttpRequest : NSObject<NSURLConnectionDataDelegate>

@property (strong, nonatomic) NSMutableData *resultData;
@property (strong, nonatomic) FinishBlock finishBlock;

+ (void)postRequestWithURL:(NSString *)urlStr
                 paramters:(NSString *)paramters
              finshedBlock:(FinishBlock)block;

@end

-----------------------------------------------------------------------



//
//  HttpRequest.m
//  UseBlockCallBack
//
//  Created by Michael on 2/13/14.
//  Copyright (c) 2014 EIMS. All rights reserved.
//

#import "HttpRequest.h"

@implementation HttpRequest

+ (void)postRequestWithURL:(NSString *)urlStr
                 paramters:(NSString *)paramters
              finshedBlock:(FinishBlock)block
{
    HttpRequest *httpRequest = [[HttpRequest alloc]init];
    httpRequest.finishBlock = block;
   
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *requset = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
    [requset setHTTPBody:[paramters dataUsingEncoding:NSUTF8StringEncoding]];
   
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:requset delegate:httpRequest];
    NSLog(connection ? @"连接创建成功" : @"连接创建失败");
}
/**
*  接收到服务器回应的时回调
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    if (!self.resultData) {
        self.resultData = [[NSMutableData alloc]init];
    } else {
        [self.resultData setLength:0];
    }
   
    if ([response respondsToSelector:@selector(allHeaderFields)]) {
        NSDictionary *dic = [httpResponse allHeaderFields];
        NSLog(@"[network]allHeaderFields:%@",[dic description]);
    }
}
/**
*  接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.resultData appendData:data];
}
/**
*  数据传完之后调用此方法
*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *resultStr = [[NSString alloc]initWithData:self.resultData
                                               encoding:NSUTF8StringEncoding];
    if (self.finishBlock) {
        self.finishBlock(resultStr);
    }
}
/**
*  网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"network error : %@", [error localizedDescription]);
   
    if (self.finishBlock) {
        self.finishBlock(nil);
    }
}


@end

-----------------------------------------------------------------------

[HttpRequest postRequestWithURL:@"http://www.baidu.com"
                          paramters:@""
                       finshedBlock:^(NSString *dataString) {
                           NSLog(@"finish callback block, result: %@", dataString);
}];
分享到:
评论

相关推荐

    ios-Swift 轻量级网络请求类,一般请求就用它.zip

    今年8月份写的请求类,刚开始是基于 NSURLConnect 封装,近期废弃了所有 NSURLConnect 相关的 API, 全面基于 NSURLSession 用法和 AFNetworking 查不多,也有 两个 block 进行请求结果的回调.

    iOS中block变量捕获原理详析

    Block概述 Block它是C语言级别和运行时方面的一个特征。Block封装了一段代码逻辑,也用{}括起,和标准C语言中的函数/函数指针很相似,此外就是blokc能够对定义环境中的变量可以引用... 网络请求回调 Block的作用 用来

    IOS 使用Block二次封装AFNetworking 3.0详解

    其中,AFNetworking 3.0 是对 NSURLSession 进行的封装,简化了很多步骤,但是在现实开发中,我们可以将AFNetworking再次封装到一个类中,这样通过传去URL和Parameters 就可以进行网络请求。 具体实现步骤: 前期...

    ios-基于AFN封装的网络请求库.zip

    2. block 回调方式 3. 集约式的请求方法,链式调用 4. 快速请求同一个 API 时,可以通过设置 minRequestInterval 防止这种情况发生。如果两次请求时间间隔小于 minRequestInterval ,直接从缓存文件拿取数据。...

    网络请求类封装get、post block回调

    这个源码是实现了简单的网络请求类封装get、post block回调,大家可以了解一下吧。

    iOS聊天界面实现

    很实用的,聊天demo,支持文字,图片,图文混排发送,demo内部已经实现发送图片网络请求用block 回调非常实用功能

    swift-iOS轻量级http请求封装基于AFNetworking3.xYYCache

    轻量级http请求,基于封装AFN3.x YYCache, 接口设计上,通过block返回创建好的请求模型对象,调用者只有对非默认值属性进行修改即可,接口调用完成也只通过一个block来回调,具体情况通过响应模型对象来解析

    ios-根据AFNetworking3.0框架封装的,实现了GET、POST、PUT、DELETE、上传文件、下载文件、文件上传下载进度条等功能.zip

    Network, 根据AFNetworking3.0框架封装...3、block回调代码可读性更高 4、快速上传下载文件,同时显示下载或上传进度条 5、服务器请求接口单独用一个枚举来管理,方便查找和代码的阅读,提高开发效率 6、支持IPv6

    YTKNetwork:YTKNetwork是基于AFNetworking的高级请求util

    block和delegate回调 批处理请求(请参阅YTKBatchRequest ) 链请求(请参阅YTKChainRequest ) URL过滤器,替换URL的一部分或附加公共参数 插件机制,处理请求的开始和结束。 提供了用于显示“正在加载” HUD的...

    ios-验证码设置.zip

    自定义Button分类,通过Block回调向服务器发送验证码请求。 使用方法如下: 创建按钮-》设置frame-》添加到当前视图 - (void)initUI { TFSButton* btn = [[TFSButton alloc]initWithFrame:CGRectMake(...

    IOS swift3.0 下闭包语法整理

    主要是用于callBack(异步回调)或者两个类之间的通信。它的本质一个函数,一个可执行的代码块,只是这个函数是没有名字的,也就是匿名函数。你也可以把他看作如 int、float一样,是一种数据类型,一种可以作为参数...

Global site tag (gtag.js) - Google Analytics