Objective c NSURLSessionTask的AFNetworking 1.x到3.x迁移?

Objective c NSURLSessionTask的AFNetworking 1.x到3.x迁移?,objective-c,ios9,xcode7,nsurlsession,afnetworking-3,Objective C,Ios9,Xcode7,Nsurlsession,Afnetworking 3,我有一个旧项目,它不是在iOS 9中工作。我已经阅读了AFNetworking的官方文档,并完成了大部分迁移 网络管理员: _requestManager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:baseURL ]]; //here we can set the request header as the access token once we have logged in. AFHTTPReque

我有一个旧项目,它不是在iOS 9中工作。我已经阅读了AFNetworking的官方文档,并完成了大部分迁移

网络管理员:

_requestManager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:baseURL ]];
//here we can set the request header as the access token once we have logged in.
AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer];
[_requestManager setRequestSerializer:requestSerializer];
[_requestManager setResponseSerializer:responseSerializer];
早期版本:

// 2. Create an `NSMutableURLRequest`.
NSMutableURLRequest *request =
    [[NetworkManager sharedInstance].requestManager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:fullPath
                                                                                          parameters:nil
                                                                           constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {
    NSString *fileName = [NSString stringWithFormat:@"%@.caf", theAudioItem.media_item_name];
    [formData appendPartWithFileData:audioData name:theAudioItem.media_item_name fileName:fileName mimeType:@"audio/caf"];
}];

// 3. Create and use `AFHTTPRequestOperationManager` to create an `AFHTTPRequestOperation` from the `NSMutableURLRequest` that we just created.
AFHTTPRequestOperation *operation =
    [[NetworkManager sharedInstance].requestManager HTTPRequestOperationWithRequest:request
                                                                            success: ^(AFHTTPRequestOperation *operation, id responseObject) {
    result(YES, @"");
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
    if (operation.responseData) {
        NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableContainers error:nil];

        result(NO, [responseDict valueForKey:@"Message"]);
        [self deleteTmpFilesFromParts:formParts];
    } else {
        result(NO, [NSString stringWithFormat:@"Failed to upload media to %@!", gallery.gallery_name]);
        [self deleteTmpFilesFromParts:formParts];
    }


    result(NO, errorMessage);
}];

// 4. Set the progress block of the operation.
[operation setUploadProgressBlock: ^(NSUInteger __unused bytesWritten,
                                     long long totalBytesWritten,
                                     long long totalBytesExpectedToWrite) {
    DLog(@"progress is %i %lld %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
    progress((float)totalBytesWritten / (float)totalBytesExpectedToWrite);
}];

// 5. Begin!
[operation start];
//2。创建一个“NSMutableURLRequest”。
NSMutableURLRequest*请求=
[[NetworkManager sharedInstance].requestManager.requestSerializer multipartFormRequestWithMethod:@“POST”URLString:fullPath
参数:零
构造体WithBlock:^(id formData){
NSString*文件名=[NSString stringWithFormat:@“%@.caf”,theAudioItem.media_item_name];
[formData appendPartWithFileData:audioData名称:theAudioItem.media_item_name文件名:fileName mimeType:@“audio/caf”];
}];
// 3. 创建并使用“AFHTTPRequestOperationManager”从我们刚刚创建的“NSMutableURLRequest”创建“AFHTTPRequestOperation”。
AFHTTPRequestOperation*操作=
[[NetworkManager sharedInstance].requestManager HTTPRequestOperationWithRequest:request
成功:^(AFHTTPRequestOperation*操作,id响应对象){
结果(是,");;
}失败:^(AFHTTPRequestOperation*操作,NSError*错误){
if(操作响应数据){
NSDictionary*responseDict=[NSJSONSerialization JSONObjectWithData:operation.responseData选项:NSJSONReadingMutableContainers错误:nil];
结果(否,[responseDict valueForKey:@“Message”]);
[自删除tmpfilesfromparts:formParts];
}否则{
结果(否,[NSString stringWithFormat:@“未能将媒体上载到%@!”,gallery.gallery_name]);
[自删除tmpfilesfromparts:formParts];
}
结果(否,错误消息);
}];
// 4. 设置操作的进度块。
[operation setUploadProgressBlock:^(nsInteger uu未使用的字节写入,
写了很长很长的TotalBytes,
long long totalBytesExpectedToWrite){
DLog(@“进度为%i%lld%lld”、BytesWrited、TotalBytesWrited、totalBytesExpectedToWrite);
进度((浮动)TotalBytesWrite/(浮动)totalBytesExpectedToWrite);
}];
// 5. 开始!
[操作启动];
转换后的响应:(更新了注释,给出了错误)

//没有“AFHTTPRequestSerializer”的可见@interface声明选择器“multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:”
NSMutableURLRequest*请求=
[[NetworkManager sharedInstance].requestManager.requestSerializer multipartFormRequestWithMethod:@“POST”URLString:完整路径参数:nil
构造体WithBlock:^(id formData){
NSString*文件名=[NSString stringWithFormat:@“%@.caf”,theAudioItem.media_item_name];
[formData appendPartWithFileData:audioData名称:theAudioItem.media_item_name文件名:fileName mimeType:@“audio/caf”];
}];
// 3. 创建并使用“AFHTTPRequestOperationManager”从我们刚刚创建的“NSMutableURLRequest”创建“AFHTTPRequestOperation”。
//“AFHTTPSessionManager”没有可见的@interface声明选择器“HTTPRequestOperationWithRequest:success:failure:”
NSURLSessionTask*操作=
[[NetworkManager sharedInstance].requestManager HTTPRequestOperationWithRequest:request
成功:^(NSURLSessionTask*操作,id响应对象){
结果(是,");;
}失败:^(NSURLSessionTask*操作,NSError*错误){
//操作的错误没有responseData
if(操作响应数据){
NSDictionary*responseDict=[NSJSONSerialization JSONObjectWithData:operation.responseData选项:NSJSONReadingMutableContainers错误:nil];
结果(否,[responseDict valueForKey:@“Message”]);
[自删除tmpfilesfromparts:formParts];
}否则{
结果(否,[NSString stringWithFormat:@“未能将媒体上载到%@!”,gallery.gallery_name]);
[自删除tmpfilesfromparts:formParts];
}
//得到回应
结果(否,错误消息);
}];
// 4. 设置操作的进度块。
//“NSURLSessionTask”没有可见的@interface声明选择器“setUploadProgressBlock:”
[operation setUploadProgressBlock:^(nsInteger uu未使用的字节写入,
写了很长很长的TotalBytes,
long long totalBytesExpectedToWrite){
DLog(@“进度为%i%lld%lld”、BytesWrited、TotalBytesWrited、totalBytesExpectedToWrite);
进度((浮动)TotalBytesWrite/(浮动)totalBytesExpectedToWrite);
}];
// 5. 开始!
//“NSURLSessionTask”没有可见的@interface声明选择器“start”
[操作启动];

AFHTTPSessionManager的等效代码是:

NSURLSessionTask *task = [[[NetworkManager sharedInstance] requestManager] POST:fullPath parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    NSString *fileName = [NSString stringWithFormat:@"%@.caf", theAudioItem.media_item_name];
    [formData appendPartWithFileData:audioData name:theAudioItem.media_item_name fileName:fileName mimeType:@"audio/caf"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
    NSLog(@"%.3f", uploadProgress.fractionCompleted);
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    // success
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    // failure

    // if you need to process the `NSData` associated with this error (if any), you'd do:

    NSData *data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
    if (data) { ... }
}];
NSURLSessionTask*任务=[[NetworkManager sharedInstance]requestManager]POST:完整路径参数:nil constructingBodyWithBlock:^(id非空formData){
NSString*文件名=[NSString stringWithFormat:@“%@.caf”,theAudioItem.media_item_name];
[formData appendPartWithFileData:audioData名称:theAudioItem.media_item_name文件名:fileName mimeType:@“audio/caf”];
}进度:^(NSProgress*_非空上传进度){
NSLog(@“%.3f”,上载进度。已完成分段);
}成功:^(NSURLSessionDataTask*_非空任务,id_可空响应对象){
//成功
}失败:^(NSURLSessionDataTask*_可空任务,NSError*_非空错误){
//失败
//如果需要处理与此错误相关联的“NSData”(如果有),请执行以下操作:
NSData*data=error.userInfo[AFNetworkingOpe
NSURLSessionTask *task = [[[NetworkManager sharedInstance] requestManager] POST:fullPath parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    NSString *fileName = [NSString stringWithFormat:@"%@.caf", theAudioItem.media_item_name];
    [formData appendPartWithFileData:audioData name:theAudioItem.media_item_name fileName:fileName mimeType:@"audio/caf"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
    NSLog(@"%.3f", uploadProgress.fractionCompleted);
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    // success
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    // failure

    // if you need to process the `NSData` associated with this error (if any), you'd do:

    NSData *data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
    if (data) { ... }
}];