ASINetworkQueue:尝试在解除分配的委托上执行选择器

时间:2011-02-22 08:20:51

标签: iphone asihttprequest

我正在使用示例代码 https://gist.github.com/150447

当viewcontroller卸载时,我将网络队列设置为nil,并且还调用reset方法。

[[self networkQueue1] reset];
[self setNetworkQueue1:nil];

但是一旦我回到上一个视图控制器,我仍然会出现异常。

* - [myViewController performSelector:withObject:]:消息发送到解除分配的实例0xc1d1bb0

请说明哪里出错了。

谢谢,

2 个答案:

答案 0 :(得分:3)

您需要在dealloc()方法或更早版本中取消任何委托。根据您正在设置的确切代表等,这样的事情应该这样做:

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

基本上,您需要确保在委托被销毁之前删除任何当前请求的委托 - 这将确保永远不会调用已释放的委托。

答案 1 :(得分:0)

请参阅此帖子NSURLConnection gives EXC BAD ACCESS when tap on other tab while data loading

基本上,一个对象仍然有一个对你的视图控制器的引用(可能它可以回调它),当你回到之前的VC时,当前的VC正被释放(应该这样)。你需要找到该对象,并将其引用到您的VC(可能称为“委托”或“回调”)。 希望有所帮助。