機能するのは、インスタンスと、さまざまな URL 要求を実行するNSOperationQueue
多数のインスタンスを使用することです。NSOperation
まず、リクエストをエンキューするクラスにキューを設定します。それへの強力な参照を維持するようにしてください。
@interface MyEnqueingClass ()
@property (nonatomic, strong) NSOperationQueue *operationQueue;
@end
実装のどこかで、init
メソッドを言います:
_operationQueue = [[NSOperationQueue alloc] init];
_operationQueue.maxConcurrentOperationCount = 1;
基本的にシリアルキューが必要なため、maxConcurrentOperationCount
1.
これを設定したら、次のようなコードを書きます。
[self.operationQueue addOperationWithBlock:^{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"my://URLString"]];
NSError *error;
NSURLResponse *response;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!responseData)
{
//Maybe try this request again instead of completely restarting? Depends on your application.
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//Do something here to handle the error - maybe you need to cancel all the enqueued operations and start again?
[self.operationQueue cancelAllOperations];
[self startOver];
}];
}
else
{
//Handle the success case;
}
}];
[self.operationQueue addOperationWithBlock:^{
//Make another request, according to the next instuctions?
}];
このようにして、同期NSURLRequest
s を送信し、エラー状態を処理できます。これには、完全に救済して最初からやり直すことも含まれます (-cancelAllOperations
呼び出された行)。これらのリクエストは次々に実行されます。
NSOperation
もちろん、ブロックを使用するのではなく、カスタム サブクラスを記述し、それらのインスタンスをキューに入れることもできます。
ご不明な点がございましたら、お気軽にお問い合わせください。