我創建了一個NSOperation
,其目標是從20個URL下載幾張圖片(如20)。 因此,在此NSOperation
中,我創建了20 AFImageRequestOperation
將它們添加到NSOperationQueue
並在隊列上調用-waitUntilAllOperationsAreFinished
。NSOperationQueue INSIDE an NSOperation
問題是,它不會等待,它立即返回。下面是代碼
- (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
還沒有返回,所以我不知道該怎麼想。
編輯1:其實我很想知道,如果我的DDLog
裏面的成功和失敗塊,因爲waitUntilAllOperationsAreFinished
是阻塞線程,直到所有的操作完成。這也許可以解釋爲什麼我沒有看到任何事情突然發生。
這正是我所需要的,爲自己設置'isFinished'和'isExecuting'標誌。它完美的作品非常感謝你:) – ItsASecret 2013-02-13 15:40:44