2013-12-23 113 views
4

我正在使用AFNetworking2代碼進行批量請求。我從示例代碼複製了&粘貼並更改了上傳操作以下載。我需要取消在控制器上的下載操作消失。我想實現取消:AFNetworking 2:取消批量請求

[[self.imagesQueue.operations 
filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) 
{ return [evaluatedObject isKindOfClass:[AFHTTPRequestOperation class]]; }]] makeObjectsPerformSelector:@selector(cancel)]; 
批量要求的

(下載圖像):

-(void) startDownloadImages { 

    NSMutableArray *mutableOperations = [NSMutableArray array]; 
    //self.downloadOperations = [NSMutableArray array]; 
    for (NSString *str in _project.frames) { 

     NSURLRequest *request = 
     [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" 
                 URLString:str 
                parameters:nil]; 

     AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
     [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

     NSLog(@"OK %@", str); 


     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"FAILS %@", str); 
     }]; 

     [mutableOperations addObject:operation]; 
    } 

    NSArray *operations = 
    [AFURLConnectionOperation batchOfRequestOperations:mutableOperations 
             progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { 
     NSLog(@"%lu of %lu complete", (unsigned long)numberOfFinishedOperations, (unsigned long)totalNumberOfOperations); 
    } completionBlock:^(NSArray *operations) { 
     NSLog(@"All operations in batch complete"); 

    }]; 

    self.imagesQueue = [[NSOperationQueue alloc] init]; 
    self.imagesQueue.name = @"com.imagesqueue"; 
    self.imagesQueue.maxConcurrentOperationCount = 1; 

    [self.imagesQueue addOperations:operations waitUntilFinished:NO]; 
    //[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; 
} 

開始和取消的系列導致EXC_BREAKPOINT(代碼= EXC_ARM_BREAKPOINT,子碼= 0xdefe):

libdispatch.dylib`dispatch_group_leave: 
    0x37e1e7d8: dmb ishst 
    0x37e1e7dc: ldrex r1, [r0, #40] 
    0x37e1e7e0: adds r1, #1 
    0x37e1e7e2: strex r2, r1, [r0, #40] 
    0x37e1e7e6: cmp r2, #0 
    0x37e1e7e8: bne 0x37e1e7dc    ; dispatch_group_leave + 4 
    0x37e1e7ea: cmp.w r1, #4294967295 
    0x37e1e7ee: ble 0x37e1e7fe    ; dispatch_group_leave + 38 
    0x37e1e7f0: mvn r2, #2147483648 
    0x37e1e7f4: cmp r1, r2 
    0x37e1e7f6: it  eq 
    0x37e1e7f8: beq.w 0x37e21df8    ; _dispatch_group_wake 
    0x37e1e7fc: bx  lr 
    0x37e1e7fe: trap 
    0x37e1e800: nop  
    0x37e1e802: nop 

任何提示?

+0

AFNetworking正在以巨大的速度變化。你的問題可能更適合github問題列表。 – Jessedc

回答

1

嘗試聲明str作爲塊變量(你在一個塊存取它):

__block NSString *str; 

for (str in _project.frames) { 

您也可以嘗試以檢查操作已經在進行取消選擇之前已經完成。

在視圖中將會消失,您可以調用圖像隊列上的cancelAllOperations來取消所有其餘的操作。