Objective c NSURLSessionTask的AFNetworking 1.x到3.x迁移?
我有一个旧项目,它不是在iOS 9中工作。我已经阅读了AFNetworking的官方文档,并完成了大部分迁移 网络管理员: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
_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) { ... }
}];