NSOperation
20 の URL からいくつかの画像 (20 など) をダウンロードすることを目標に作成しました。そのため、このNSOperation
中に 20 個を作成AFImageRequestOperation
し、それらを に追加してキューNSOperationQueue
に呼び出します。-waitUntilAllOperationsAreFinished
問題は、待たずにすぐに戻ることです。ここにコードがあります
- (void)main {
NSArray *array = [I have the 20 links stored in this array];
self.queue = [[NSOperationQueue alloc]init];
self.queue.maxConcurrentOperationCount = 1;
for (int i = 0; i < array.count; i++) {
NSURL *url = [NSURL URLWithString:[array objectAtIndex:i]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFImageRequestOperation *op = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) {
return image;
} success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
// SUCCESS BLOCK (not relevant)
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
// FAILURE BLOCK (not relevant)
}];
[self.queue addOperation:op];
}
[self.queue waitUntilAllOperationsAreFinished]; // Here is the problem it doesn't wait
DDLogWarn(@"-- %@ FINISHED --", self);
}
コンソールでは、DDLogWarn(@"-- %@ FINISHED --", self);
すべての操作が開始される前に出力されるため、私の推測では、waitUntilAllOperationsAreFinished
はジョブを実行せず、待機もしていませんでしたが、その後も 20 の操作がまだ実行されているため、main
まだ返されていない可能性があります。だから私はもう何を考えるべきか分からない。
EDIT 1:実際には、すべての操作が完了するまでスレッドをDDLog
ブロックしているため、成功と失敗の内部がブロックされているかどうか疑問に思っています。waitUntilAllOperationsAreFinished
それは、なぜ私が何も起こっていないのか、そしてすべてが突然に見えないのかを説明するかもしれません.