ios之mknetworkkit笔记

asi没法用了,蛋疼了,在af和mk之间纠结,感觉af不适合我的口味,解析和网络耦合相对似乎重了点

mk似乎默认的不支持下载的断点续传,这里参考网上的代码处理了下,0修改mk的库,下面是实现的代码

//
//  RootViewController.m
//  webTest
//
//  Created by mmc on 13-11-24.
//  Copyright (c) 2013年 mmc. All rights reserved.
//

#import "RootViewController.h"
#import "MKNetworkEngine.h"

@implementation RootViewController

- (IBAction) getTest:(id)sender
{
    MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"192.168.1.105:8080"];
    [engine useCache];
    
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:0];
    [params setObject:@"get数据1" forKey:@"arg1"];
    [params setObject:@"get数据2" forKey:@"arg2"];
    
    //最后的斜杠不能丢掉,不然会出问题
    MKNetworkOperation *operation = [engine operationWithPath:@"/yii/testApp/index.php?r=httpTest/getTest/"
                                              params:params
                                          httpMethod:@"GET"];
    
    [operation addCompletionHandler:^(MKNetworkOperation *completedOperation)
     {
         NSString *responseString = [completedOperation responseString];
         NSLog(@"%@", responseString);
         
         if([completedOperation isCachedResponse]) {
             NSLog(@"Data from cache %@", [completedOperation responseString]);
         }
         else {
             NSLog(@"Data from server %@", [completedOperation responseString]);
         }
         
     }errorHandler:^(MKNetworkOperation *errorOp, NSError* error) {
         
         NSLog(@"%@",error);
     }];
    
    [engine enqueueOperation:operation];

}

- (IBAction) postTest:(id)sender
{
    MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"192.168.1.105:8080"];
    [engine useCache];
    
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:0];
    [params setObject:@"post数据1" forKey:@"arg1"];
    [params setObject:@"post数据2" forKey:@"arg2"];
    
    MKNetworkOperation *operation = [engine operationWithPath:@"/yii/testApp/index.php?r=httpTest/postTest/"
                                                       params:params
                                                   httpMethod:@"POST"];
    
    [operation addCompletionHandler:^(MKNetworkOperation *completedOperation)
     {
         NSString *responseString = [completedOperation responseString];
         NSLog(@"%@", responseString);
         
         if([completedOperation isCachedResponse]) {
             NSLog(@"Data from cache %@", [completedOperation responseString]);
         }
         else {
             NSLog(@"Data from server %@", [completedOperation responseString]);
         }
         
     }errorHandler:^(MKNetworkOperation *errorOp, NSError* error) {
         
         NSLog(@"%@",error);
     }];
    
    [engine enqueueOperation:operation];
}

- (IBAction) downloadTest:(id)sender
{
    MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"127.0.0.1"];
    [engine useCache];
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachesDirectory = paths[0];
    NSString *downloadPath = [cachesDirectory stringByAppendingPathComponent:@"x.iso"];

    
    //判断之前是否下载过 如果有下载重新构造Header
    NSMutableDictionary *newHeadersDict = [[NSMutableDictionary alloc] init];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    
    if ([fileManager fileExistsAtPath:downloadPath])
    {
        NSError *error = nil;
        unsigned long long fileSize = [[fileManager attributesOfItemAtPath:downloadPath error:&error] fileSize];
        
        NSString *headerRange = [NSString stringWithFormat:@"bytes=%llu-", fileSize];
        [newHeadersDict setObject:headerRange forKey:@"Range"];
    }
    
    MKNetworkOperation *operation = [engine operationWithURLString:@"http://192.168.1.105:8080/2.iso"];
    
    [operation addDownloadStream:[NSOutputStream outputStreamToFileAtPath:downloadPath
                                                            append:YES]];
    
    [operation addHeaders:newHeadersDict];
    [engine enqueueOperation:operation];
    
    //进度回调
    [operation onDownloadProgressChanged:^(double progress)
    {
        NSLog(@"download %.2f", progress*100.0);
    }];
    
    //结束回调
    [operation addCompletionHandler:^(MKNetworkOperation* completedRequest)
     {
        NSLog(@"download complete %@", completedRequest);
     }errorHandler:^(MKNetworkOperation *errorOp, NSError* error)
    {
        NSLog(@"%@", error);
    }];
}

@end

下一步,实现xxxBegin,xxxEnd,xxxFail,然后弄个delegates,做响应链传递,神奇的block,实在受不了,看起来真tmd不是一般的累啊,重回接口回调- -

原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/3440379.html