我有一个自定义导航控制器,所以我做了我自己的后退按钮
-(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中看到队列中没有更多请求,但错误仍然显示。我错过了什么吗?
感谢
答案 0 :(得分:4)
您的代表可能会被要求通知您取消。您需要删除dealloc方法中的所有委托,例如:
for (ASIHTTPRequest *req in [queue operations])
{
[req setDelegate:nil];
[req cancel];
}
[queue setDelegate:nil];
(如果您正在使用它们,还会进行代理等)