gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:37:07 26 4
gpt4 key购买 nike

我正在调用用于表格单元格图像下载的 block 。

[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);
}
}];
}

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

project log

最佳答案

因为我相信您的代码在这里崩溃了:[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;
}
}];

一个更干净的解决方案是实现一个 Controller 来存储您的所有请求。当你有这个时,很容易取消它们。您不应该在 UITableViewControllerUITableViewCell 内执行此操作。

关于通过 NSURLConnection sendAsynchronousRequest 下载 Ios 表格单元格图像会导致表格单元格删除时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com