Ios table 通过 NSURLConnection sendAsynchronousRequest 下载的单元格图像导致 table 单元格删除时崩溃

Ios table cell image download by NSURLConnection sendAsynchronousRequest causes crash on table cell delete

我正在为 table 细胞图像下载调用块。

[self downloadImageWithURL:aa completionBlock:^(BOOL succeeded, UIImage *image) {
            if (succeeded) {

            cell.imageView.image = image;


            ((DatabaseHelper *) [upcoming objectAtIndex:indexPath.row]).image = image;
        }
        }];



- (void)downloadImageWithURL:(NSURL *)url completionBlock:(void     (^)(BOOL succeeded, UIImage *image))completionBlock
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                           if ( !error )
                           {
                               UIImage *image = [[UIImage alloc] initWithData:data];
                               completionBlock(YES,image);
                           } else{
                               completionBlock(NO,nil);
                           }
                       }];
}

它工作得很好......但问题是,一旦调用块的任何单元格,如果我在 AsynchronousRequest 完成之前删除该单元格,应用程序就会崩溃。 那么当我删除单元格时如何从 NSoperation 队列中删除调用。

因为我认为您的代码在这里崩溃了:[upcoming objectAtIndex:indexPath.row]。快速解决方法是检查您的数组是否可用,如下所示:

[self downloadImageWithURL:aa completionBlock:^(BOOL succeeded, UIImage *image) {
        if (succeeded && upcoming && [upcoming lenght] > indexPath.row) {

        cell.imageView.image = image;


        ((DatabaseHelper *) [upcoming objectAtIndex:indexPath.row]).image = image;
    }
    }];

一个更简洁的解决方案是实现一个控制器,它存储您的所有请求。当你有这个时,很容易取消它们。您不应该在 UITableViewControllerUITableViewCell.

中执行此操作