0
[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可以理解的结果。我可以中止异步连接吗?还是有更好的方法来解决这个问题?

4

1 回答 1

2

首先,在 UIView 子类中启动 url 请求是非常糟糕的风格。您应该在视图控制器中执行此操作!

NSOperationQueue 应该是视图控制器的类实例。此外,您需要在完成处理程序中配置的视图必须是类实例(属性)。对所有请求使用相同的操作队列。在 viewWillDisappear 中,您可以通过以下方式取消所有请求操作:

[self.operationQueue cancelAllOperations];
于 2012-06-18T21:57:18.297 回答