将 ASIHTTPRequest 更改为 AFNetworking 2 以获得简单的 URL 请求
Posted
技术标签:
【中文标题】将 ASIHTTPRequest 更改为 AFNetworking 2 以获得简单的 URL 请求【英文标题】:Changing ASIHTTPRequest to AFNetworking 2 for simple URL request 【发布时间】:2014-08-20 06:59:47 【问题描述】:我正在更新另一个开发者创建的 ios 应用。 他们使用了 ASIHTTPRequest,但我认为我应该切换到 AFNetworking,以便整个应用程序可以是 ARC。我没有编写网络应用程序的经验,所以我发现 AFNetworking 2 非常令人困惑。在我的项目中包含文件并使用#import "AFNetworking.h" 添加标题后,是否有一种简单的方法可以在 Rs-s-reader.m 中调整以下方法以使其正常工作?
这是现有的代码:
-(NSArray*)readUTF16LEFeed:(NSURL*) urlToRead
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:urlToRead];
[request startSynchronous];
NSError *error = [request error];
if (!error)
lastModified = [NSDate date];
NSData *response = [request responseData];//UTF-16LE
NSString* responseString = [[NSString alloc] initWithData:response encoding: NSUTF16LittleEndianStringEncoding];
DLog(@"string is: %@",responseString);
responseString = [responseString stringByReplacingOccurrencesOfString:@"ISO-8859-1" withString:@"UTF16-LE"];
NSData* data = [responseString dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
return [self parseNamesFromXML:data];
return nil;
【问题讨论】:
【参考方案1】:添加导入
#import "AFHTTPRequestOperationManager+AutoRetry.h"
并尝试使用此代码
-(void)readUTF16LEFeed:(NSString*) urlToRead
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
void (^successBlock)(AFHTTPRequestOperation * operation, id responseObject) = ^(AFHTTPRequestOperation * operation, id responseObject)
//work with response
//NSData *response = [request responseData];//UTF-16LE
NSString* responseString = [[NSString alloc] initWithData:responseObject encoding: NSUTF16LittleEndianStringEncoding];
responseString = [responseString stringByReplacingOccurrencesOfString:@"ISO-8859-1" withString:@"UTF16-LE"];
NSData* data = [responseString dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
;
void (^failureBlock)(AFHTTPRequestOperation * operation, NSError * error) = ^(AFHTTPRequestOperation * operation, NSError * error)
//if error do this
;
[manager GET:urlToRead parameters:nil success:successBlock failure:failureBlock autoRetry:5 retryInterval:2];
【讨论】:
我没有文件“AFHTTPRequestOperationManager+AutoRetry.h” 我没有文件 "AFHTTPRequestOperationManager+AutoRetry.h" 但是如果我使用 "AFHTTPRequestOperationManager.h" 它会生成 3 个警告:for -(void)readUTF16LEFeed:(NSString*) urlToRead我收到警告“在实现'readUTF16LEFeed:'时返回类型冲突:NSArray *' vs 'void'。第二个警告是“未使用的变量'data'。第三个警告是最后一行的“未找到实例方法”。 AutoRetry 是有用的类别github。 NSArray ' vs 'void' - .h 文件中的变化 -(NSArray)readUTF16LEFeed:(NSURL*) urlToRead 到 -(void)readUTF16LEFeed:(NSString*) urlToRead 完美教程是here 我将文件夹添加到我的项目中,但现在出现“找不到 ObjcAssociatedObjectHelpers.h 文件”和未找到 的错误。以上是关于将 ASIHTTPRequest 更改为 AFNetworking 2 以获得简单的 URL 请求的主要内容,如果未能解决你的问题,请参考以下文章
ASIHttpRequest - 如何将参数的 NSDictionary 转换为 url 编码的查询参数字符串?