0

Clear Read APIを介して一連のURLを実行しようとしています(基本的にURLから記事の部分を抽出します)。AFNetworkingLibraryを使用しています。

APIとの対話を簡素化するために使用するAFClearReadClientサブクラスであるクラスがあります。AFHTTPClientそこで、ベース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それはクラスで行われるべきですか?

4

1 に答える 1

1

まず、requestOperationsではなくrequestをキューに入れています-違いがあります。関数の名前(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ができたので、先に進んでそれをキューに入れることができ、動作するはずです。

于 2013-03-25T05:33:04.057 に答える