ios exc_bad_access因为迟到了

时间:2012-06-18 21:41:20

标签: ios nsurlconnection exc-bad-access sendasynchronousrequest

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

1 个答案:

答案 0 :(得分:2)

首先,在UIView子类中启动url请求的风格非常糟糕。你应该在视图控制器中做到这一点!

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

[self.operationQueue cancelAllOperations];