我正在尝试通过 Clear Read API 运行一堆 URL (基本上从 URL 中提取文章部分),我正在使用 AFNetworking Library .
我有一个 AFClearReadClient
类,它是 AFHTTPClient
的子类,我用它来简化与 API 的交互。我在那里设置了基本 URL,事实上它是一个 JSON 请求。
#import "AFClearReadClient.h"
#import "AFJSONRequestOperation.h"
@implementation AFClearReadClient
+ (AFClearReadClient *)sharedClient {
static AFClearReadClient *sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedClient = [[AFClearReadClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://api.thequeue.org/v1/clear?url=&format="]];
});
return sharedClient;
}
- (id)initWithBaseURL:(NSURL *)url {
if (self = [super initWithBaseURL:url]) {
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
}
return self;
}
然后,我将一个文章列表存储在 NSDictionary
中,我循环遍历该列表,获取每篇文章的 URL,为即将发生的请求创建参数(这些参数是 GET 变量和它们的值在基本 URL 中,对吧?),然后创建请求,并将其添加到包含所有请求的数组中。
然后我将它们批量排队(我认为我做得不对)。这会创建每个请求并将其排入队列,从而将它们放入执行过程中,对吧?但是我在progressBlock 中做什么呢?我无权访问返回的 JSON(看起来,本地变量只是 NSUIntegers
),因此我无法执行我想做的操作(保存返回的文章文本)。
- (void)addArticlesToQueueFromList:(NSDictionary *)articles {
// Create an array to hold all of our requests to make
NSMutableArray *requests = [[NSMutableArray alloc] init];
for (NSString *key in articles) {
NSString *articleURL = [[articles objectForKey:key] objectForKey:@"resolved_url"];
NSDictionary *requestParameters = @{@"url": articleURL,
@"format": @"json"};
NSMutableURLRequest *request = [[AFClearReadClient sharedClient] requestWithMethod:@"GET" path:nil parameters:requestParameters];
[requests addObject:request];
}
// [[AFClearReadClient sharedClient] setMaxConcurrentOperationCount:5];
[[AFClearReadClient sharedClient] enqueueBatchOfHTTPRequestOperationsWithRequests:[requests copy] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
} completionBlock:^(NSArray *operations) {
}];
}
此外,我不确定应该如何使用 setMaxConcurrentOperationCount:
方法。应该在 AFClearReadClient
类中完成吗?
最佳答案
首先,您正在排队请求,而不是 requestOperations - 这是有区别的。请注意该函数的名称 (enqueueBatchOfHTTPRequestOperations)。在请求步骤之前一切都很好 - 然后您需要创建一个 AFJSONRequestOperation。因此,一旦收到请求,请执行以下操作:
AFJSONRequestOperation *requestOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){ ...this is your success block...}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){ ...this is your failure block...}];
现在您已经有了一个 requestOperation,您可以继续将其排入队列,它应该可以工作。
关于ios - 使用 AFNetworking 和 AFHTTPClient 通过 API 运行许多 URL - 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15607358/