在为iphone下载时弹出视图控制器时来自ASIHTTPRequest的exc_bad_access

时间:2011-08-21 07:27:00

标签: iphone objective-c download asihttprequest exc-bad-access

我有一个自定义导航控制器,所以我做了我自己的后退按钮

-(void)navigateBack{
    [self.navigationController popViewControllerAnimated:YES];
}

并且在视图上加载了,我使用ASINetworkQueue

请求了许多图像
-(void)sendRequest:(NSURL *)url withParams:(NSDictionary *)params andSelector:(NSString *)selector{
NSString *jsonString = [params yajl_JSONString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:jsonString forKey:@"json"];
[request setTimeOutSeconds:15];
[[self networkQueue] setDelegate:self];
[[self networkQueue] setRequestDidFinishSelector:NSSelectorFromString(selector)];
[[self networkQueue] setRequestDidFailSelector:@selector(asiRequestFailed:)];
[[self networkQueue] addOperation:request];
[[self networkQueue] go];
}

基本上,无论何时我发送HTTP请求,我都会[self sendRequest:]。 当我转到这个视图控制器,然后在所有图像下载之前按回来,我得到一个EXC_BAD_ACCESS指向ASIHTTPFormRequest尝试执行选择器的行。我试过把

[networkQueue cancelAllOperations];[self setNetworkQueue:nil];

在我的dealloc方法中,我在此之前和之后放置了断点,我可以从GDB中看到队列中没有更多请求,但错误仍然显示。我错过了什么吗?

感谢

1 个答案:

答案 0 :(得分:4)

您的代表可能会被要求通知您取消。您需要删除dealloc方法中的所有委托,例如:

for (ASIHTTPRequest *req in [queue operations])
{
    [req setDelegate:nil];
    [req cancel];
}
[queue setDelegate:nil];

(如果您正在使用它们,还会进行代理等)