[NSURLConnection sendAsynchronousRequest:req queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if(data != nil && self.superview != nil) { // <-- EXC_BAD_ACCESS on this line
[self.musicItemImg setAlpha:0.0];
[self.musicItemImg setImage:[UIImage imageWithData:data]];
[UIView animateWithDuration:0.25 animations:^{
[self.musicItemImg setAlpha:1.0];
}];
}
});
}];
有时在异步加载完成之前删除此视图,并且在尝试使用self
时,我会得到EXC_BAD_ACCESS
,这是可以理解的。我可以中止异步连接吗?或者有更好的方法来解决这个问题吗?
答案 0 :(得分:2)
首先,在UIView子类中启动url请求的风格非常糟糕。你应该在视图控制器中做到这一点!
NSOperationQueue应该是视图控制器的类实例。您需要在完成处理程序中配置的视图必须是类实例(属性)。对所有请求使用相同的操作队列。在viewWillDisappear中,您可以使用以下命令取消所有请求操作:
[self.operationQueue cancelAllOperations];